#define(整数)有什么作用?

当然是一个重复,我会尽快删除它我会遇到一个答案。我就是找不到我要找的东西。

这两行c是什么意思?

#define NN_DIGITS     (  4)
#define MM_MARKS_DONE (255)

我知道什么#define#define ()做什么,在哪里#define ()执行宏(),但我不知道这个特殊的警告(使用整数)。

写下来()定义一个整数值实际上是多余的吗?应按位解释这些值吗?如果我们不写会发生什么()。4 和 255 会被当作一个字符串吗?

回答

关键字:“执行”。这就是你误解的根源。

不执行宏。他们被替换了。preprcosseor 用NN_DIGITS令牌序列替换令牌( 4)。事实上,它几乎可以用任何标记序列替换它。Even#define NN_DIGITS ( %34 (DDd ]是一个有效的宏定义(由我的猫提供),尽管事实上我们肯定不想尝试扩展它。

写下来()来定义一个整数值实际上是多余的吗?

从实际的角度来看,是的,这是多余的。但是有些人可能会这样做以保持与其他宏的一致性,其中结果表达式可能取决于括号的存在。

应按位解释这些值吗?

对于计算机来说,一切都是按位计算的。

如果我们不写 () 会发生什么。4 和 255 会被当作一个字符串吗?

不,它只是令牌4255而不是序列( 4)(255)尊重。预处理器只处理令牌,它实际上对类型系统一无所知。如果宏出现在程序中,请说:

int a = NN_DIGITS;

它将被预处理器变成:

int a = (  4);

然后通过将程序转换为可执行文件的管道中的其他步骤进一步编译。

  • there's a case where defining `(4)` instead of `4` will make a difference: [Is there a good reason for always enclosing a define in parentheses in C?](https://stackoverflow.com/q/9081479/995714)

以上是#define(整数)有什么作用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>