[英]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.