簡體   English   中英

c 中的#define 出現奇怪錯誤

[英]Strange error with #define in c

我知道 #define 在編譯為實際值之前被替換。 那么為什么這里的第一個代碼編譯沒有錯誤,而第二個沒有?

第一個;

#include <stdio.h>
#include <stdlib.h>
int main()
{
   printf("bc");
   return 0;
}

第二個(不工作);

#include <stdio.h>
#include <stdlib.h>
#define Str "bc";
int main()
{
   printf(Str);
   return 0;
}

error: expected ')' before ';' token

謝謝你的回答,對不起我的英語不好......

實際上第二個有效,第一個無效。 問題是分號:

#define Str "bc";
                ^

因為Str宏的計算結果為"bc"; — 包括分號。 所以你的宏擴展為:

printf("bc";);

您不需要在#define 后面加上分號。 它們以換行符結尾,而不是像 C 語句那樣以分號結尾。 我知道這很令人困惑; C 預處理器是一頭奇怪的野獸,在人們了解之前就被發明了。

利用

#define Str "bc"

替換后的定義如下所示:

printf("bc";);

第一個的問題是Str被替換為"bc"; .

將其更改為

#define Str "bc"

您需要刪除; 你在哪里定義 str。 因為你會得到 printf("bc";);

第一個代碼無法編譯,因為您需要在#define 之后刪除分號,第二個代碼可以正常工作。

第一個不起作用,因為這些行:

#define Str "bc";
printf(Str);

擴展到這一行:

printf("bc";);

你要:

#define Str "bc"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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