#進行宏字符串連接,在宏中把參數解釋為字符串,不可以在語句中直接使用。在宏定義中
printf("%s;/n", #S) 會被解釋為
printf("%s;/n", "S")
例如下面的代碼
#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;
}
同時宏定義又是一個逗號表達式 ,所以拷貝到des裡面的值為後面S也就是str的值。
注意:
int a=printf("%s;\n", "S"),a等於printf的返回值,也就是printf打印的字符個數。
摘自 何昊專欄 程序員面試500問