[英]How to conditional compile main() in C?
我正在使用C中的一個小型開源項目,我正在嘗試使用帶有C的測試框架(框架是min_unit
)。
我有一個帶有原型的foo.h
文件和帶有實現的foo.c
文件。
在我的測試文件中, tests.c
,我有
#include "../test_framework/min_unit.h"
#include "foo.c"
... test cases ...
問題是,因為我在foo.c
有一個main()
函數(我需要編譯它),我無法編譯tests.c
因為我得到一個錯誤,指出
note: previous definition of ‘main’ was here
int main() {
我的問題是,有沒有辦法使它成為foo.c
中的main()
函數是有條件的,所以當我運行tests.c
時它不會編譯? 只需要一遍又一遍地刪除和添加main就太煩人了。
使用條件編譯的最簡單方法是使用#ifdef
語句。 例如,在foo.c
你有:
#ifdef NOT_TESTING //if a macro NOT_TESTING was defined
int main() {
//main function here
}
#endif
在test.c
,你把:
#ifndef NOT_TESTING //if NOT_TESTING was NOT defined
int main() {
//main function here
}
#endif
如果要在foo.c
編譯main
函數,只需在編譯命令中添加選項-DNOT_TESTING
即可。 如果要在test.c
編譯main
函數,請不要添加該選項。
你有沒有嘗試使用預處理器編譯條件? 可能你已經嘗試但它不起作用,哼?
無論如何,你可能應該:
1-在“tests.c”類文件的頂部定義一個標記,如:
#defined foo_MIN_UNIT_TEST
2-使用#ifndef / #endif在“foo.c”類文件中包圍你的“main(){...}”方法,如:
#ifndef foo_MIN_UNIT_TEST //consider using #ifndef not #ifdef!!!
int main()
{ ... }
#endif
3-這樣,當您編譯單元測試文件時,foo.c的main()方法將不會包含在編譯時,並且編譯器將只能使用唯一的main()測試方法。
如需進一步閱讀: http : //www.cprogramming.com/
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.