[英]# symbol in printf statement doesn't work
此代碼正確執行
#include<stdio.h>
#define JOIN(s1, s2) printf("%s=%s %s=%s \n", #s1, s1, #s2, s2);
int main()
{
char *str1="India";
char *str2="BIX";
JOIN(str1, str2);
return 0;
}
但是此代碼無法執行
#include<stdio.h>
int main()
{
char *str1="India";
char *str2="BIX";
printf("%s=%s %s=%s \n", #str1, str1, #str2, str2);
return 0;
}
我只是替換了第一段編碼的第一個宏..但是它不起作用
使用#var
功能生成"var"
是預處理器的一部分,因此您只能將其用作宏的一部分。
如果您想繼續使用它,通常人們會寫一個名為STRINGIFY的宏:
#define STRINGIFY(x) #x
但就您而言,最好的辦法就是自己報價。
char *str1="India";
char *str2="BIX";
printf("%s=%s %s=%s \n", "str1", str1, "str2", str2);
這是預處理程序語法,只能在宏定義( #define..
)內部使用。
您的代碼首先通過CPP(C #xxx..
程序)運行,該CPP處理所有#xxx..
語法。 然后將其結果傳遞給C編譯器,該編譯器對#xxxx..
語法一無所知。
您可以自己嘗試-在文件上運行cpp而不是gcc ,您可以看到宏擴展的結果。
刪除#它僅適用於宏
嘗試這個
int main()
{
char *str1="India";
char *str2="BIX";
printf("str1=%s str2=%s \n", str1, str2);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.