我对if/else和#if /#else /#endif感到困惑.它们似乎具有相同的逻辑功能.
我可以问一下它们之间有什么区别吗?
#if
,#else
并且#endif
属于预处理.它们没有执行,但是是文本替换的说明.您可以将它们视为一种通常在文本编辑器中找到的自动"搜索和替换"功能.
if
并且else
是运行时构造.您可以将它们视为在程序运行时执行.
假设你有这个程序:
#include <iostream>
#define VALUE 1
int main()
{
#if VALUE == 1
std::cout << "one\n";
#else
std::cout << "not one\n";
#endif
}
Run Code Online (Sandbox Code Playgroud)
当您告诉编译器编译此程序时,预处理器将在实际编译"真实"C++代码之前进行文本替换.这就好像程序是:
#include <iostream>
int main()
{
std::cout << "one\n";
}
Run Code Online (Sandbox Code Playgroud)
现在,从技术上讲你可以在if
这里使用:
#include <iostream>
#define VALUE 1
int main()
{
if (VALUE == 1)
{
std::cout << "one\n";
}
else
{
std::cout << "not one\n";
}
}
Run Code Online (Sandbox Code Playgroud)
但是在C++中,你不使用#define
常量.你会有类似的东西:
#include <iostream>
int const value = 1;
int main()
{
if (value == 1)
{
std::cout << "one\n";
}
else
{
std::cout << "not one\n";
}
}
Run Code Online (Sandbox Code Playgroud)
也许该值仅在程序执行时已知,例如通过用户输入.然后你显然不能使用#if
,只有在程序运行之前才能使用.你必须使用if
:
#include <iostream>
int main()
{
int value;
std::cin >> value; // gross simplification here
if (value == 1)
{
std::cout << "one\n";
}
else
{
std::cout << "not one\n";
}
}
What kind of specific situations for me to choose each of them?
Run Code Online (Sandbox Code Playgroud)
初学者的一个很好的指导原则是:使用#if
(或实际:) #ifndef
仅用于包括警卫.#if
当您遇到只能由预处理器解决的问题时,请考虑进一步使用.
我能问一下他们之间有什么区别吗?
#if
#else
和#endif
是对编译器的指令,如果满足编译级别条件(例如定义的宏或具有特定值),则仅编译它们之间的代码。
if
和else
是编译算法的一部分。
什么样的具体情况适合我选择?
预编译条件用于在无意义的情况下禁用部分代码(例如在 Linux 下编译时调用 Windows 特定的 API)。它们是开发跨平台代码的关键(例如)。