用法
#if <expression>
…
#elif
…
#end
<expression> 是整数常量比较的表达式,例如:
- defined表达式,例如 defined AAA, 或者 defined(AAA), 如果AAA是一个宏定义,return true,否则,return false;
- 单个整数,例如:1/10/100/0, 非零为true,零为false;
- 整数比较,例如:1 == 1为true, 0 == 0为ture, 1 > 2为false;
- 单个的字符,例如:‘A’ == ‘A’ 为true, ‘A’ == 'C’为false, 我推测最终还是转化为ASIC码,然后进行整数的比较;
- 如果出现两个未定义的变量,例如 AAA == BBB, 永远为true,我推测测试AAA和BBB都会被认为是零,即 0 == 0,所以永远为true;关于这一点,可以参考CppReference
After all macro expansion and evaluation of defined, __has_include (since C++17), and __has_cpp_attribute (since C++20) expressions, any identifier which is not a boolean literal is replaced with the number 0 (this includes identifiers that are lexically keywords, but not alternative tokens like and).
Then the expression is evaluated as an integral constant expression.
切记,文章来源:https://www.toymoban.com/news/detail-413335.html
- 不允许字符串的比较,例如 “AAA” == “AAA”, “AAA” == “BBB”, 编译会报错;当然,这本来也不应该使用==,对于字符串的比较应该使用strcmp,但是又由于是编译预处理,strcmp作为一个函数是没办法使用的。。。
参考:
https://stackoverflow.com/questions/2335888/how-to-compare-strings-in-c-conditional-preprocessor-directives文章来源地址https://www.toymoban.com/news/detail-413335.html
到了这里,关于编译预处理:#if的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!