簡體   English   中英

使用C中的頭文件替換#include

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

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