Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用#define #包括 #包括 #定义d 10+10 int main() { printf(“%d”,d*d); 返回0; }_C_C Preprocessor - Fatal编程技术网

在c中使用#define #包括 #包括 #定义d 10+10 int main() { printf(“%d”,d*d); 返回0; }

在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

我不熟悉宏的概念。我发现上面程序的输出是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+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