在C中是否存在不使用小写宏定义的技术原因?

时间:2016-11-19 16:28:56

标签: c macros

我开始学习来自Java和Java背景的C语言。 Javascript和我想知道是否存在技术原因导致以下被视为不良做法,或者它是否只是语言演变的方式?

#define bool char
#define false 0
#define true 1
#define null NULL

我看到的任何地方我总是看到已定义的变量(如果这是正确的单词)是大写的,我想知道这个约定是否有一个很好的技术原因?我确定已经多次询问过,但我似乎无法找到答案。

2 个答案:

答案 0 :(得分:6)

他们称之为宏。是的,按照惯例,他们需要ALL_UPPERCASE以避免与普通标识符发生冲突,因为他们只是文本替换而不遵循该语言的正常范围规则。

请考虑以下事项:

<span am-time-ago="story.created_utc | amFromUnix"></span>

为了避免这样的惊喜(代码不是它看起来像),我们试图保持宏不同。

答案 1 :(得分:1)

小写定义不是坏的(即使有违反共同惯例),而不是重新发明语言被认为是这样:

#define null NULL

这样你就会混淆维护程序员,他希望NULL作为指定空指针常量的惯用方法。