我尝试在C预处理器代码中使用构建变量作为字符串来进行编译器切换。
**构建变量:**VER:一预处理器/定义符号:VER=${VER}
VER=${VER}
代码:
#if VER == 'A' #define VERSION (1) #endif
这个表达式总是假的。同样的语法也适用于build变量中给定的数字,但我需要以同样的方式使用字符串。怎么做呢?IDE:Eclipse编译器:IAR
2ledvvac1#
这是一个众所周知的现象:未找到的预处理器令牌由#if评估为零。因此,坚固的代码应该沿着这行写:
#if
#if defined(VER) && VER == 'A'
或者如果你想要一个编译器错误:
#ifndef VER #error VER not defined! #elif VER == 'A' #define VERSION (1) #endif
klr1opcd2#
我认为问题是你把文本作为一个字符来转义。因此'A'将被计算为值65(ASCII码中字母A的数字)。您可以通过将构建变量VER定义为值65来验证这一点。如果你想比较一个(简单的)字符串,你应该只删除引号:
'A'
VER
#if VER == A #define VERSION 1 #endif
2条答案
按热度按时间2ledvvac1#
这是一个众所周知的现象:未找到的预处理器令牌由
#if
评估为零。因此,坚固的代码应该沿着这行写:或者如果你想要一个编译器错误:
klr1opcd2#
我认为问题是你把文本作为一个字符来转义。因此
'A'
将被计算为值65(ASCII码中字母A的数字)。您可以通过将构建变量VER
定义为值65来验证这一点。如果你想比较一个(简单的)字符串,你应该只删除引号: