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

SNR*_*SNR 1 c

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

这两行c是什么意思?

#define NN_DIGITS     (  4)
#define MM_MARKS_DONE (255)
Run Code Online (Sandbox Code Playgroud)

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

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

Sto*_*ica 5

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

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

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

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

应按位解释这些值吗?

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

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

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

int a = NN_DIGITS;
Run Code Online (Sandbox Code Playgroud)

它将被预处理器变成:

int a = (  4);
Run Code Online (Sandbox Code Playgroud)

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

  • 在这种情况下,定义 `(4)` 而不是 `4` 会产生影响:[Is there a good Reason for always enleading a Define in the Parentheses in C?](/sf/ask/635703561/ 995714) (2认同)