我有一個程序,這取決於用戶輸入,#includes
一個標頭headerA.h
或另一個headerB.h
我期望標頭在那裏直到程序結束。如何根據用戶輸入每次#包含不同的文件?
headerA
和headerB
定義的結構使用相同的名字,但有不同的領域,我不能夠在一個兩個文件合併,並沒有能夠改變任何東西從headerA
和headerB
使用庫人。
有沒有辦法解決這個問題?
我有一個程序,這取決於用戶輸入,#includes
一個標頭headerA.h
或另一個headerB.h
我期望標頭在那裏直到程序結束。如何根據用戶輸入每次#包含不同的文件?
headerA
和headerB
定義的結構使用相同的名字,但有不同的領域,我不能夠在一個兩個文件合併,並沒有能夠改變任何東西從headerA
和headerB
使用庫人。
有沒有辦法解決這個問題?
儘管可以有條件地包含文件,但在運行時似乎無法進行此更改。看到這個answer關於它。 if語句僅在運行時才起作用。
預處理器宏:
#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
是預處理器指令,預處理器只作爲編譯的一部分運行。
我不認爲這是可能的,因爲您的#include
s在編譯之前即在預處理過程中解決。所以在運行時不可能改變它們。
但是,您可以通過在編譯期間定義一個宏來嘗試條件編譯。
#ifdef HEADERA
#include <headerA>
#ifdef HEADERB
#include <headerA>
雖然compilinging GCC
$ gcc prog.c -DHEADERA
包括headerA反之亦然
好吧,這很可能是回答我沒有想聽到的。有什麼方法可以根據變量定義兩個具有相同名稱和不同字段的不同結構? – McD0n3ld 2013-05-07 07:32:08
@ user1927490您可能想了解更多關於工會的信息。 – 2013-05-07 08:01:43