簡體   English   中英

C ++預處理器包含並定義多個文件的故障

[英]C++ Preprocessor include and define trouble with multiple files

我將抽象我的問題以避免包含不需要的細節,但如果需要我可以提供源代碼。 我正在使用visual studio。

我有以下文件 - 所有頭文件都有#pragma一次:

  • A.cpp //(包含我的主要功能)
  • BH
  • B.cpp //(不扮演角色)
  • C.cpp

以下是預處理器命令的設置方法:

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.

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