简单的 C 预处理器替换
Simple C Preprocessor substitution
所以我写了一个简单的程序来尝试对 #define
宏有更基本的了解,我想知道这两个程序之间的区别是什么,是否有使用第三个程序的根本原因程序? :
#include<stdio.h>
#define x 7
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
这个程序打印出 343 因为 7 * 7 * 7 = 343
#include<stdio.h>
#define x 5+2
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
这个程序根据操作顺序打印出 27。
编辑
一种强制第二个打印出 343 的方法,我们可以添加括号,这样我们就可以执行以下操作:
#include<stdio.h>
#define x (5+2)
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
有什么理由用这种方式而不是第一种方式吗?
宏替换原样替换文本。
因此 C 编译器看到代码
i = 7 * 7 * 7; // when #DEFINE x 7
一种情况,另一种情况如下
i = 5+2 * 5+2 * 5+2; // when #DEFINE x 5+2
(由于简单的算术优先级,结果略有不同。)
为了使它们等效,需要添加括号,例如(首选,见评论):
#define x (5+2)
虽然下面会"suffice"这里
i = (x) * (x) * (x);
所以我写了一个简单的程序来尝试对 #define
宏有更基本的了解,我想知道这两个程序之间的区别是什么,是否有使用第三个程序的根本原因程序? :
#include<stdio.h>
#define x 7
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
这个程序打印出 343 因为 7 * 7 * 7 = 343
#include<stdio.h>
#define x 5+2
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
这个程序根据操作顺序打印出 27。 编辑 一种强制第二个打印出 343 的方法,我们可以添加括号,这样我们就可以执行以下操作:
#include<stdio.h>
#define x (5+2)
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
有什么理由用这种方式而不是第一种方式吗?
宏替换原样替换文本。
因此 C 编译器看到代码
i = 7 * 7 * 7; // when #DEFINE x 7
一种情况,另一种情况如下
i = 5+2 * 5+2 * 5+2; // when #DEFINE x 5+2
(由于简单的算术优先级,结果略有不同。)
为了使它们等效,需要添加括号,例如(首选,见评论):
#define x (5+2)
虽然下面会"suffice"这里
i = (x) * (x) * (x);