请解释一下程序的工作原理,函数调用是如何进行的,#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