问题描述
我有我需要macro'ize功能。该函数包含临时变量,我不记得是否有关于宏替换使用临时变量的任何规则。
I have a function that I need to macro'ize. The function contains temp variables and I can't remember if there are any rules about use of temporary variables in macro substitutions.
long fooAlloc(struct foo *f, long size)
{
long i1, i2;
double *data[7];
/* do something */
return 42;
}
MACRO形式:
MACRO Form:
#define ALLOC_FOO(f, size) \
{\
long i1, i2;\
double *data[7];\
\
/* do something */ \
}
这是好吗? (即没有讨厌的副作用 - 比通常之外的其他:没有类型安全等)。顺便说一句,我知道。宏是邪恶 - 我只是必须使用它在这种情况下 - 没有太多的选择。
Is this ok? (i.e. no nasty side effect - other than the usual ones : not "type safe" etc). BTW, I know "macros are evil" - I simply have to use it in this case - not much choice.
推荐答案
有只有两种情况下,它可以在任何合理的方式。
There are only two conditions under which it works in any "reasonable" way.
-
宏没有return语句。您可以使用
做的,而
伎俩。
#define macro(x) do { int y = x; func(&y); } while (0)
您只针对GCC。
You only target GCC.
#define min(x,y) ({ int _x = (x), _y = (y); _x < _y ? _x : _y; })
这将有助于如果你解释为什么的,你必须使用一个宏(是否你的办公室有宏观星期一什么?)。否则,我们无法真正的帮助。
It would help if you explain why you have to use a macro (does your office have "macro mondays" or something?). Otherwise we can't really help.
这篇关于一个C宏可以包含临时变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!