2013-05-07 35 views
1

我有一個程序,這取決於用戶輸入,#includes一個標頭headerA.h或另一個headerB.h我期望標頭在那裏直到程序結束。如何根據用戶輸入每次#包含不同的文件?

headerAheaderB定義的結構使用相同的名字,但有不同的領域,我不能夠在一個兩個文件合併,並沒有能夠改變任何東西從headerAheaderB使用庫人。

有沒有辦法解決這個問題?

回答

1

儘管可以有條件地包含文件,但在運行時似乎無法進行此更改。看到這個answer關於它。 if語句僅在運行時才起作用。

+0

好吧,這很可能是回答我沒有想聽到的。有什麼方法可以根據變量定義兩個具有相同名稱和不同字段的不同結構? – McD0n3ld 2013-05-07 07:32:08

+0

@ user1927490您可能想了解更多關於工會的信息。 – 2013-05-07 08:01:43

2

預處理器宏:

#if defined(USE_HEADERA) 
# include "headerA.h" 
#elif defined(USE_HEADERB) 
# include "headerB.h" 
#else 
# error must define USE_HEADERA or USE_HEADERB 
#endif 

如果你有GCC,那麼你告訴預處理器要使用GCC -D選項中進行選擇:如果你想這樣做

$ gcc -DUSE_HEADERA myfile.c -o myprogram 

然而, 運行時間在執行過程中,這是不可能的。 #include是預處理器指令,預處理器只作爲編譯的一部分運行。

0

我不認爲這是可能的,因爲您的#include s在編譯之前即在預處理過程中解決。所以在運行時不可能改變它們。

但是,您可以通過在編譯期間定義一個宏來嘗試條件編譯。

#ifdef HEADERA 
    #include <headerA> 
#ifdef HEADERB 
    #include <headerA> 

雖然compilinging GCC

$ gcc prog.c -DHEADERA包括headerA反之亦然

相關問題