我了解到if或者#if都可以用于条件检查.由于我们可以检查条件if,我们为什么要使用预处理器#if?
如果我用#if而不是代码,我的代码会有什么不同if?
哪一个更好用,为什么?
T.J*_*der 38
if并且#if是不同目的的不同事物.
如果使用该if语句,则在运行时评估条件,并且两个分支的代码都存在于已编译的程序中.条件可以基于运行时信息,例如变量的状态.if用于程序中的标准流量控制.
如果使用预处理程序#if,则在编译时评估条件,并且编译程序中不包含false分支的代码.条件只能基于编译时信息(例如#define常量等).#if是为不同的编译时环境提供不同的代码(例如,在Windows与*nix上编译的不同代码,这类事情).
MOH*_*MED 13
我们不能说哪个更好用,因为一个用于编译阶段(#if)而另一个用于运行时阶段(if)
#if 1
printf("this code will be built\n");
#else
printf("this code will not\n");
#endif
Run Code Online (Sandbox Code Playgroud)
尝试构建上面的代码,gcc -E您将看到您的编译器将生成另一个仅包含以下内容的代码:
printf("this code will be build\n");
Run Code Online (Sandbox Code Playgroud)
另一个printf将不会出现在新代码(预处理器代码)中,然后在程序二进制文件中不存在.
结论:#if在编译阶段进行处理,但在if程序运行时处理正常情况
您可以#if 0在代码的一部分中使用,以避免编译器编译它.就像你评论过这一部分一样
例
int main(void) {
printf("this code will be build\n");
#if 0
printf("this code will not\n");
#endif
}
Run Code Online (Sandbox Code Playgroud)
它相当于
int main(void) {
printf("this code will be built\n");
/*
printf("this code will not\n");
*/
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14693 次 |
| 最近记录: |