簡體   English   中英

#printf語句中的符號不​​起作用

[英]# 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM