只有宏定义时C++语句
我想做一个if/else语句。但是我想在ifdef宏测试中包装else语句只有宏定义时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 (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年代开始的。代码已经在使用模板,这需要做很多更改。使用宏,我可以将实验代码分开。至少这是我的理解/希望。我认为最好的验证方法是编译代码。如果编译,则调试并查看宏中的代码是否被跳过。你会得到答案的。