你能解释一下这个c语言程序中与头文件和宏语句相关的工作原理吗?



请解释一下程序的工作原理,函数调用是如何进行的,#var的用途是什么(它是如何工作的)

#include <stdio.h> 
#define getName(var) #var 
int main() 
{ 
printf("%s", getName( char )); 
return 0; 
}

#是预处理宏替换中的操作符,用于将参数转换为字符串字面值。

因此,当用参数char调用getName时,#var被替换为包含var标记的字符串字面值,这只是单个标记char。所以替换的是字符串字面值"char"

printf语句的结果是printf("%s", "char");,输出" char "。

如果您使用-E编译选项使用gcc编译它,答案是相当明显的。下面是预处理后的程序:

int main()
{
printf("%s", "char");
return 0;
}

可以看到,#宏从参数生成了一个C字符串字面值。

这里有另一个例子

#include <stdio.h>
#define result(expr) printf("%s = %dn", #expr, expr)
int main() 
{ 
result(5+5);
return 0; 
}

输出

5+5 = 10

https://godbolt.org/z/Ec8T3T

最新更新