printf中#号的意思
#进行宏字符串连接,在宏中 把参数解释为字符串,不可以在语句中直接使用。
在宏定义中
printf("%s;/n", #S) 会被解释为
printf("%s;/n", "S")
例如下面的代码
code start
#define TRACE(S) (printf("%s;/n", #S), S) /*注意用逗号而不是分号*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int a=5;
int b=TRACE(a);
const char *str="hello";
char des[50];
strcpy(des,TRACE(str));
puts(des);
system("pause");
return 0;
}
code end
输出结果为:
a;
str;
hello
同时宏定义又是一个逗号表达式,所以拷贝到des里面的值为后面S也就是str的值。
又比如下面的解释:
3 .宏的单行定义(少见用法)
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
我们假设:x = 1 ,则有:
A( 1 ) ------ 〉T_1
B( 1 ) ------ 〉 ' 1 '
C( 1 ) ------ 〉 " 1 "
posted on 2018-10-30 17:49 blogernice 阅读(2084) 评论(0) 编辑 收藏 举报