[英]C++ Preprocessor include and define trouble with multiple files
我將抽象我的問題以避免包含不需要的細節,但如果需要我可以提供源代碼。 我正在使用visual studio。
A.cpp #defines UseOptionOne
A.cpp #includes B.h
B.h #ifdef UseOptionOne
#defines Func as f1() //(calling a function that prints a msg)
#else
#defines Func as [blank]
A.cpp #includes C.h
C.h #includes B.h // (B.h have #pragma once, so it doesnt get included again)
A.cpp main function uses Func //- It prints as intended
A.cpp calls function in C.cpp // this function does the following:
{
#ifndef UseOptionOne
exit(0) //- Doesn't happen, so UseOptionOne is defined
#endif
uses Func //- DOES NOTHING?????
}
A.cpp uses Func //- It prints as intended
我不明白這是怎么回事? 確認UseOptionOne仍然在Ch中定義,但Func的定義不同???
有誰能解釋一下? 或者您希望我為您提供我相當復雜的解決方案或一些代碼片段?
我真的迷路了:(
編輯:我使用斷點來確認調用C.cpp函數,'Func'被簡單地視為空白
編輯2:由於缺乏聲譽,我無法回答我自己的問題,所以我把它放在這里:
我創建了一個實現我的抽象描述的新項目,它確實觸發了#ifndef中的退出
因此,您無法通過此描述解決問題。 我只需要再次查看所有內容並找出錯誤/錯誤。
我的兩分錢:
UseOptionsOne僅為A.cpp和包含Ah的類定義:在您的情況下,它僅在A.cpp中定義
C.cpp沒有引用Ah,因此它沒有看到定義。 在這種情況下,UseOptionOne未在C.cpp中聲明,它使用空白函數。
當你超出C.cpp的范圍並返回A.cpp的范圍時,該函數可以工作,因為在該范圍內定義了UseOptionOne。
如果要在所有文件中使用define,可以創建單獨的definitions.h標頭並將其放入定義中,然后將該文件包含在您希望定義起作用的所有標頭中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.