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