c - m是一个定义为10+2的宏;为什么 m*m 的计算结果为 32?

标签 c macros

当我在 Linux 上执行以下代码时,输​​出是 32。为什么会这样?

#include <stdio.h> 
#define m 10+2

int main() {
  int i;
  i = m * m;
  printf("%d", i);
  return 0;
}

最佳答案

宏扩展不注意周围的语法,因此 i=m*m 扩展为 i=10+2*10+2,而不是 i=(10+2)*(10+2)。这就是为什么人们应该总是将宏定义和参数放在括号中:

#define m (10+2)

关于c - m是一个定义为10+2的宏;为什么 m*m 的计算结果为 32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301571/

相关文章:

c++ - 如何对无符号长数使用宏?

c++ - MakeFile.am : Mixing c and c++, 新错误

c - 将二进制文件写入文件会从 C 中先前不相关的 popen 命令中提取不正确的数据

latex 新命令

c++ - #pragma 曾经是 C++11 标准的一部分吗?

c++ - 设置和取消设置 64 位整数中的特定位

macros - 是否可以在宏中嵌套结构声明以应用结构属性?

c - 使用 rand 生成随机数

c - 在 gcc 中初始化数组,未定义对 `memcpy' 的引用

c - testfork C 代码语法错误