3

我发现了几个不同风格的宏。
对于像这样的头文件:

#define __HEADER_H__
#define _HEADER_H_
#define _header_h

简单的宏:

#define SOMEMACRO something
#define somemacro something
#define SOME_MACRO something

带参数的宏:

#define func_macro() something() // arguments not used?
#define FUNC_MACRO something()
#define func_macro something()

所以我的问题是:其中一些风格是好还是坏?宏名称是否有“默认”样式?

4

2 回答 2

3

使用所有大写字母绝对是常量的方法。但是,我建议永远不要使用函数宏。我建议编写内联函数。在某些情况下使用的函数宏可能会导致逻辑错误。例如:

#define FUNC(x) x + x

int main() {
    int a = 1;
    b = FUNC(a++);
}

结果是未定义的,很可能不是预期的结果。

于 2012-07-24T21:12:13.450 回答
2

根据印第安希尔 C 风格指南,在 UofT、UW 和其他地方进行了修订

11. 命名约定(第 13 页):

#define 常量应该全部大写。

...

许多宏“函数”都使用大写字母。一些宏(例如 getchar 和 putchar )是小写的,因为它们也可能作为函数存在。仅当宏的行为类似于函数调用时,小写宏名称才可接受,也就是说,它们只对参数进行一次评估,并且不对命名参数赋值。有时,即使参数只计算一次,也无法编写行为类似于函数的宏。

另请阅读 pdf 文档第 14 页的第 12 章(常量)和第 13 章(宏)。


恕我直言,他们的命名约定非常合理。

于 2012-07-26T19:17:03.293 回答