gpt4 book ai didi

C宏可以包含临时变量吗?

转载 作者:太空狗 更新时间:2023-10-29 16:42:06 25 4
gpt4 key购买 nike

我有一个函数需要宏化。该函数包含临时变量,我不记得是否有任何关于在宏替换中使用临时变量的规则。

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 */ \
}

这样可以吗? (即没有令人讨厌的副作用 - 除了通常的副作用:不是“类型安全”等)。顺便说一句,我知道“宏是邪恶的”——在这种情况下我只需要使用它——没有太多选择。

最佳答案

只有两种情况下它才能以任何“合理”的方式工作。

  1. 宏没有返回语句。您可以使用 do while 技巧。

    #define macro(x) do { int y = x; func(&y); } while (0)
  2. 您只针对 GCC。

    #define min(x,y) ({ int _x = (x), _y = (y); _x < _y ? _x : _y; })

如果您解释为什么您必须使用宏(您的办公室有“宏星期一”之类的吗?),将会有所帮助。否则我们真的帮不上什么忙。

关于C宏可以包含临时变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com