Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有宏定义时C++语句_C++_C++11_C Preprocessor_C++14 - Fatal编程技术网

只有宏定义时C++语句

只有宏定义时C++语句,c++,c++11,c-preprocessor,c++14,C++,C++11,C Preprocessor,C++14,我想做一个if/else语句。但是我想在ifdef宏测试中包装else语句 if (check1) { ... } #ifdef MACRO else {...} #endif 允许这样做吗 允许这样做吗 是的,这是有效的。你特别怀疑什么 允许这样做吗 是的,这是有效的。您特别怀疑什么?预处理器在编译器之前运行。如果预处理器对宏进行求值并生成有效的c/c++代码(如您所包含的示例),则这是一种有效的用法。预处理器在编译器之前运行。如果预处理器对宏求值并生成有效的c/c++代码,就像您所包含的

我想做一个if/else语句。但是我想在ifdef宏测试中包装else语句

if (check1)
{
...
}
#ifdef MACRO
else 
{...}
#endif
允许这样做吗

允许这样做吗

是的,这是有效的。你特别怀疑什么

允许这样做吗


是的,这是有效的。您特别怀疑什么?

预处理器在编译器之前运行。如果预处理器对宏进行求值并生成有效的c/c++代码(如您所包含的示例),则这是一种有效的用法。

预处理器在编译器之前运行。如果预处理器对宏求值并生成有效的c/c++代码,就像您所包含的示例一样,这是一个有效的用法。

当然可以,它的c。预处理器在编译器之前对其求值,所以编译器只需看到这一点

if (check1)
{
...
}
但是你不能/不应该这样做

#ifdef MACRO
if (check1)
{
...
}
#endif
else 
{...}
当然你们可以,它的C。预处理器在编译器之前对它求值,所以编译器就可以看到这个

if (check1)
{
...
}
但是你不能/不应该这样做

#ifdef MACRO
if (check1)
{
...
}
#endif
else 
{...}

是的,这是允许的,但是为什么有必要这样做呢?我正在添加实验代码,我需要旧代码来继续。但是你可以用模板来做——你已经标记了C++14。宏是从20世纪70年代开始的。代码已经在使用模板,这需要做很多更改。使用宏,我可以将实验代码分开。至少这是我的理解/希望。我认为最好的验证方法是编译代码。如果编译,则调试并查看宏中的代码是否被跳过。你会得到你的答案。是的,这是允许的,但是为什么有必要这样做呢?我正在添加实验代码,我需要旧代码来继续。但是你可以用模板来做-你已经标记了C++14。宏是从20世纪70年代开始的。代码已经在使用模板,这需要做很多更改。使用宏,我可以将实验代码分开。至少这是我的理解/希望。我认为最好的验证方法是编译代码。如果编译,则调试并查看宏中的代码是否被跳过。你会得到答案的。