Tag: 预处理器指令

在#definemacros中转义#符号?

没有进入血淋淋的细节,我想使用一个#definemacros,将扩大到#include但'#'符号混淆预处理器(因为它认为我想引用一个参数)。 例如,我想要做这样的事情: #define MACRO(name) #include "name##foo" 然后使用它: MACRO(Test) 这将扩大到: #include "Testfoo" 谦虚的#符号导致预处理器barf。 MinGW给我以下错误: '#' is not followed by a macro parameter 我想我需要逃避#的标志,但我不这样做,如果这是可能的。 是的,macros确实是邪恶的

C预处理器testing多个macros的定义

我search了网站,但没有find我正在寻找的答案,所以这里是一个非常快速的问题。 我正在尝试做这样的事情: #ifdef _WIN32 || _WIN64 #include <conio.h> #endif 我怎么能做这样的事情? 我知道_WIN32是为32位和64位窗口定义的,所以我可以适用于Windows检测。 我更感兴趣的是能否像预处理指令那样使用逻辑运算符,如果是的话,因为上述方法不起作用。 用gcc编译我得到: 警告:#ifdef指令结尾的额外令牌,基本上只取第一个MACRO而忽略其余的。

是否有检测C ++ 11x支持的预处理器指令?

如果有一些代码尽可能使用C ++ 11x扩展,但是如果不支持,则有一个回退。 目前OSX版本的GCC和VisualC编译器几乎不支持C ++ 11x,所以我使用: #if (defined(__APPLE__) || (defined(_WIN32))) …fallback code without C++11x … #else … code using C++11x … #endif 而这个工作,但不是真的是正确的事情,特别是因为在MacPorts的gcc编译器支持c + + 11x。 是否有#define C11X_SUPPORTEDtypes的macros? 也许只有GCC有?

强制编译器忽略程序中的某些行

假设我有10,000行C ++代码。 此代码的200行用于testing目的(例如,检查程序并显示错误消息)。 有没有办法在C + +忽略或考虑代码的一些行(可能与预处理关键字)?

什么是双重评估,为什么要避免?

我正在用C ++读取这个macros #define max(a,b) (a > b ? a : b) 可以导致“双重评估”。 有人能给我举一个例子,说明什么时候发生双重评估,为什么不好? PS:奇怪的是我找不到任何详细的解释,除了在Clojure (我不明白)的例子。

如果预处理器指令嵌套在C ++中,

我有一个关于在C ++预处理器指令的问题: 例如: #ifndef QUESTION //some code here #ifndef QUESTION //some code here #endif #endif 我们可以这样使用它,并且C ++编译器能否以正确的方式匹配ifndef和endif ?