相关疑难解决方法(0)

如果未定义检查布尔宏,则生成错误

我有几个配置文件,每个配置文件包含一些布尔宏的定义,设置为0或1.然后,在我的代码中,我检查这样一个宏的值,以决定激活代码的哪一部分.现在是棘手的部分:我想确保包含我的宏定义的标题.

在下面的示例中,如果我忘记包含包含FOO定义的头文件,编译器将打印"world!",而我希望它生成错误.

//in the configuration header file
#define FOO 1

//in a cpp file
#if FOO  //I would like this to generate an error if I forgot to include the header file
#pragma message "Hello"
#else
#pragma message "world!"
#endif
Run Code Online (Sandbox Code Playgroud)

有可能实现这样的行为吗?怎么样?

为了澄清,我不问如果没有定义宏,如何生成错误,但是如果可以转换该#if FOO行,同时它检查布尔值并在FOO未定义时生成错误.

这样做的关键是开发人员会知道他们的代码应该包含

SPECIAL_MACRO(FOO)
Run Code Online (Sandbox Code Playgroud)

同时,检查FOO的布尔值,就好像它是一个#if FOO语句,并防止它们忘记包含头定义FOO.

c c++ macros gcc

19
推荐指数
2
解决办法
1631
查看次数

C++ 中的 #warning 预处理器

在 C# 中,我们可以使用 #warning 在错误窗口中显示警告。在 C++ 中#pragma message是这样的,但它只是输出一条消息而不是警告。

在 C++ (Window, Visual Studio) 中有没有办法故意向用户显示警告?

我试过这个 #warning DEBUG is defined

它给了我这个错误:

严重性说明项目文件行错误错误 C1021:无效的预处理器命令“警告”AecProject stdafx.h 49

c++ c-preprocessor

8
推荐指数
1
解决办法
5398
查看次数

创建自定义#warning标志

我正在构建一个商业应用程序,我们正在使用一些GPL代码来帮助我们.

我如何添加#warning或#error声明,以便在为调试构建代码时,它会发出警告,但是当我们构建发布时它会抛出错误?

我可以:

#warning this code is released under a CCL licensing scheme, see Source_Code_License.rtf
#warning this code is not LGPL-compliant
#warning this code was copied verbatim from a GP Licensed file
Run Code Online (Sandbox Code Playgroud)

在文件的开头,但我可以做得更好吗?如果包含文件,是否有更好的标记文件的方法?

我正在使用带有gcc或clang的Objective-C++.

c++ gcc warnings objective-c pragma

5
推荐指数
2
解决办法
5428
查看次数

编译器应该为#define的某些组合引发错误

在当前的项目中,我正在进行大量试验,以了解不同解决方案的性能影响.由于我喜欢保留所有代码,因此我有很多#ifdef指令,这使我可以轻松地打开和关闭某些优化.但是,未涵盖某些定义组合.如果发生这种情况,我希望看到编译器错误,即:

#define A
#define B

#ifdef A
#ifdef B
//invalid combination of defines. Compiler should raise an error.
#endif
#endif

#ifdef A
//do something
#endif
#ifdef B
//do something else
#endif
Run Code Online (Sandbox Code Playgroud)

那可能吗?

c-preprocessor preprocessor-directive

1
推荐指数
1
解决办法
215
查看次数

如果用户直接包含私有标头,则抛出编译错误/警告

在我的 C++ 代码中,我定义了一些公共和私有标头。私有标头只能包含在基于某些 #ifdef 的公共标头中。

如果用户直接包含这些私有标头,如何向用户抛出错误或警告?

c++ boost c++11

-1
推荐指数
1
解决办法
229
查看次数