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

C 宏是否有默认或推荐的样式?,c,coding-style,macros,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 F

我发现了两个不同样式的宏。
对于类似以下内容的头文件:

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


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

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

#define FUNC(x) x + x

int main() {
    int a = 1;
    b = FUNC(a++);
}
结果未定义,很可能不是预期结果。

根据:

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

#定义常量应在所有大写字母中

许多宏“函数”都是大写的。有些宏(如getchar和putchar)是小写的,因为它们也可能作为函数存在。只有当宏的行为类似于函数调用时,才可以使用小写宏名称,也就是说,它们只对其参数求值一次,而不对命名参数赋值。有时,即使参数只计算一次,也不可能编写一个行为类似于函数的宏

同时阅读pdf文档第14页的第12章(常量)和第13章(宏)



它们的命名约定非常合理。

我的编码风格:不要使用它们。绝对不要使用
\uuuuu
\uh
。两者都是为实现保留的。更一般地说,标识符以两个下划线或一个下划线开头,后跟大写字母。大写通常是个好主意,特别是如果您想警告开发人员它做了一些不寻常的事情。@RichardJ.RossIII如果您不使用宏,你怎么处理魔法数字?@RichardJ.RossIII你最终需要宏——它们不在那里,因为K&R没有任何事情要做,并且通过说“我是borer,让我们创建一个C预处理器”来获得乐趣,但他们看到了它的潜力和需要。如果你认为宏是邪恶的,我不得不推断你不能正确使用宏,只能滥用它们……你甚至不能指望这三个。这是一个未定义的行为。