在c中使用#define #包括 #包括 #定义d 10+10 int main() { printf(“%d”,d*d); 返回0; }
我不熟悉宏的概念。我发现上面程序的输出是120。它背后的逻辑是什么 谢谢在c中使用#define #包括 #包括 #定义d 10+10 int main() { printf(“%d”,d*d); 返回0; },c,c-preprocessor,C,C Preprocessor,我不熟悉宏的概念。我发现上面程序的输出是120。它背后的逻辑是什么 谢谢 #include<stdio.h> #include<stdlib.h> #define d 10+10 int main() { printf("%d",d*d); return 0; } 清楚吗?10+10*10+10=20+100=120 简单数学;) 宏不计算该值(它不加10+10),只是用指定的表达式替换所有出现的值。宏按字面意思替换。考虑搜索/替换。编译器将您的代码视为10
#include<stdio.h>
#include<stdlib.h>
#define d 10+10
int main()
{
printf("%d",d*d);
return 0;
}
清楚吗?
10+10*10+10=20+100=120
简单数学;)
宏不计算该值(它不加10+10),只是用指定的表达式替换所有出现的值。宏按字面意思替换。考虑搜索/替换。编译器将您的代码视为10+10*10+10
因此,通常将宏替换文本括在括号中:
10+10*10+10 == 10 + 100 + 10
10 + (10 * 10) + 10
当宏是类似于宏的函数时,这一点更为重要:
#define d (10 + 10)
想想
SQ(a+b)
..d*d
扩展成10+10*10+10
。乘法先于加法,所以10+100+10=120
通常,
#define
表达式应始终用括号括起来:#define d(10+10)
宏只不过是一个简单的文本替换,因此您的行:
#define SQ(x) ((x) * (x))
变成
printf("%d",d*d);
您可以使用const
变量来实现更可靠的行为:
printf("%d",10+10*10+10);
宏按原样展开。 您的程序将成为
const int d = 10+10;
计算结果解释为:
/* declarations and definitions from headers */
int main()
{
printf("%d",10+10*10+10);
return 0;
}
始终在宏(以及宏的参数)周围使用括号
预处理器指令用第二个元素替换第一个元素
就像“查找并替换”一样,我不确定“包含”,但在C中,“定义”在顶部用于定义符号。这允许编码人员执行以下操作
#define
使用
cpp source.c
查看是如何展开的
#define
#define DEBUG
string connStr = "myProductionDatabase";
#if DEBUG
connStr = "myTestDatabase"
#edif