是否有任何默认或推荐的宏样式?

时间:2012-07-24 21:00:35

标签: c coding-style macros

我发现了几种不同风格的宏 对于头文件,如下所示:

#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()

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

2 个答案:

答案 0 :(得分:3)

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

#define FUNC(x) x + x

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

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

答案 1 :(得分:2)

根据Indian Hill C style guide, as amended at UofT, UW, and elsewhere

<强> 11。命名约定(第13页):

  

#define常量应该在所有CAPS中。

...

  

许多宏“`函数''都在所有CAPS中。某些宏(例如getchar和putchar)属于小写,因为它们也可能作为函数存在。只有当宏的行为类似于函数调用时,才能接受小写宏名称,也就是说,它们只对其参数进行一次评估,并且不为命名参数赋值。有时,即使参数只被评估一次,也不可能编写一个行为类似函数的宏。

另请阅读pdf文件第14页第12章(常数)和第13章(宏)。


他们的命名惯例是恕我直言,非常合理。