【发布时间】:2013-06-05 03:02:17
【问题描述】:
我从未与 #if、#ifdef、#ifndef、#else、 合作过>#elif 和 #endif。
当我浏览一些源代码时,我发现了这些指令的广泛使用。 对条件预处理器进行了一些阅读,但没有发现它们与普通条件语句有何不同之类的线索。 所以我想知道下面的代码有什么好处:
#include<iostream>
int main()
{
int i = 0;
#if i == 0
std::cout<<"This";
#else
std::cout<<"That";
#endif
return 0;
}
在此:
#include<iostream>
int main()
{
int i = 0;
if (i == 0)
std::cout<<"This";
else
std::cout<<"That";
return 0;
}
另外,什么时候使用/不使用条件预处理器?
【问题讨论】:
-
对于初学者,
if在运行时评估,#if在编译时评估。 -
@xaxxon:您能解释一下该链接的相关性吗?
-
在这种(以及许多)情况下,如果您在编译器中打开优化,它们将给出相同的二进制结果。但是,您的第一个示例存在语法问题,因为
#if不能与常规变量一起使用。 -
@xaxxon 我没看到。该问题询问何时应该使用哪一个,但这是一个完全合法、可以回答的问题,而不是一个讨论的开始。
-
你的代码不是 C,C++ 社区可能对这个问题有不同的感受。
标签: c++ c-preprocessor preprocessor-directive