我有一些用于特定调试目的的类,所以我只在对给定功能感兴趣时使用它
在不需要时防止源垃圾,我试图通过预处理器处理它, 所以结构是这样的:
===main.cpp===
#define nowUseTmp
#include "tmp.h"
/*normal code which accesses tmp via macros*/
===EOF===
===tmp.h===
#ifdef nowUseTmp
/* class declaration */
/* macros to use static methods on class*/
#else
/*empty macro variants, so they may freely stay in code where needed*/
#endif
===EOF===
===tmp.cpp===
/*EXPECTED PLACE OF PROBLEM*/
#ifdef nowUseTmp
/* definitions */
#endif
===EOF===
问题是,当我启用nowUseTmp时(在the_very_first / each include之前),链接器报告未解析的外部(如果宏在头中定义而未在cpp文件中定义)
问题: 为什么/如何/什么是更好的方法
我希望cpp文件是单独翻译的,不知道包含链(因此无法获得有关定义的信息)
是这样的吗? 如果是这样,如何解决方法,所以我可以在多个项目之间有不断的“tmp。*”文件,并且每个项目单独管理启用/禁用(即不使用相关标题内的定义)
只是为了澄清
- >当我在相关标题(tmp.h)中放置“#define tmpUseNow”时,一切正常
- >相关定义文件(tmp.cpp)中包含相关标题(tmp.h)
- >使用简化项目测试相同的行为,只有三个文件,例如
- >假设相关文件(tmp.h,tmp.cpp)是在许多项目之间共享的常量文件(因此我没有看到如何命令它们包含带有定义的预定第三个文件,这对于使用它们的项目是个体的)
答案 0 :(得分:1)
是的,每个cpp文件都是独立处理的。如果我是你,我会确保在tmp.cpp中包含tmp.h,并且我只在tmp.h中定义nowUseTmp。
答案 1 :(得分:1)
您可以使用默认 {
"typescript.tsdk": "./node_modules/typescript/lib"
}
添加到您的 tmp.cpp 函数(将其命名为 use_tmp
)附加参数并检查它的特定行为值:
tmp.h :
value = nowUseTmp
tmp.cpp :
/* takes par2 value from the define */
void use_tmp(int par1, int par2 = nowUseTmp);