![](/img/trans.png)
[英]include a header file built in c++ using extern in c program
[英]Replacing #include using a header file in C
有時寫一些有趣的代碼是適當的,有時寫一些不可讀的代碼或帶有goto語句的代碼是很有趣的;)
我想知道是否可以使用頭文件將#include "stdio.h"
替換為您選擇的某些單詞?
如果我嘗試這樣做,則會出現類似以下錯誤
error: stray ‘#’ in program|
note: in expansion of macro ‘a’|
當我在頭文件中嘗試“ #define a #include
”之類的東西時。
我收到類似的錯誤
錯誤:程序|
注意:在宏'a'|的擴展中
當我在頭文件中嘗試“ #define #include”之類的內容時。
在執行任何宏擴展之前,在翻譯階段4(C2011,6.10 / 2)的開始處確定預處理指令。 因此,盡管您可以使用擴展#include
定義宏a
,但擴展既不是預處理指令,也不能在那時(因為它不是行上的第一個標記)也不在擴展宏時(因為為時已晚)。
結果,使用這樣的宏會導致文字文本#include
出現在預處理器輸出中,並且在普通的#include
指令可以有效出現的任何時候都是無效的C。
除非您編寫自己的編譯器,否則您無法替換在ac程序中包含頭文件的方式,這是標准的一部分,除非您自己編寫編譯器,否則就可以使其按需工作。
你是這個意思嗎
//yams.c
int main()
{
#define STDIO_H <---without this define i still get yams!
printf("yams\n");
return 0;
}
# make yams
cc yams.c -o yams
yams.c: In function ‘main’:
yams.c:6:5: warning: incompatible implicit declaration of built-in function ‘printf’
printf("yams\n");
^
# ./yams
yams
#
我很困惑= P
那么stdio是否需要不斷地包含/定義? 還是編譯器自動將其插入?
另一個使用scanf
//scanned_yams.c
int main()
{
int i;
scanf("%d",i);
}
# make scanned_yams
cc scanned_yams.c -o scanned_yams
scanned_yams.c: In function ‘main’:
scanned_yams.c:6:2: warning: incompatible implicit declaration of built-in function ‘scanf’
scanf("%d",i);
^
# ./scanned_yams
There is clearly something very wrong with me.
#
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.