【发布时间】:2012-01-06 21:26:27
【问题描述】:
我有一个需要宏化的函数。该函数包含临时变量,我不记得是否有任何关于在宏替换中使用临时变量的规则。
long fooAlloc(struct foo *f, long size)
{
long i1, i2;
double *data[7];
/* do something */
return 42;
}
宏表格:
#define ALLOC_FOO(f, size) \
{\
long i1, i2;\
double *data[7];\
\
/* do something */ \
}
这样好吗? (即没有讨厌的副作用 - 除了通常的副作用:不是“类型安全”等)。顺便说一句,我知道“宏是邪恶的”——在这种情况下我只需要使用它——没有太多选择。
【问题讨论】:
-
为什么需要宏化?如果您担心性能,那么(a)您可能会不必要地担心(除非您已经实际测量并得出结论认为这是一个重要的瓶颈)并且(b)您可以通过更多类型实现相同的效果- 安全的方式,通过创建函数
inline(一些旧的或微软的编译器可能不支持这个)。 -
@KeithThompson 性能不是这里的问题。我正在编写一个扩展库,我需要一个包装函数来做一些数据编组。宏只是提供了一种自动生成大量“粘合”代码的不易出错的方式。
-
return在宏内并没有像你想象的那样做。 -
@GregHewgill:我刚刚发现...我会相应地修改 sn-p。
标签: c c-preprocessor