古代的剑客们与
对手相逢时,无
论对手多么强大,
明知不敌,也要亮出自己的剑!
读者:我怎样构造比较字符串的 #if 预处理表达式?
小林;你不能直接这样做; #if 预处理指令只处理整数。有一种替代的方法是定义多个整数值不一样的宏, 用它们来实现条件比较。
读者:sizeof 操作符可以用于 #if 预编译指令中吗?
小林:不行。预编译在编译过程的早期进行, 此时尚未对类型名称进行分析。作为替代, 可以考虑使用 ANSI 的 <limits.h> 中定义的常量, 或者使用 “配置”(configure) 脚本。更好的办法是, 书写与类型大小无关的代码。
读者:我可以在 #include 行里使用 #ifdef 来定义两个不同的东西吗?
小林:不行。你不能 “让预处理器自己运行”。你能做的就是根据 #ifdef 设置使用两个完全不同的单独 #define 行之一。
读者:对typdef 的类型定义有没有类似 #ifdef的东西?
小林:不幸的是, 没有。你必须保存一套预处理宏 (如 MY TYPE DEFINED) 来记录某个类型是否用 typdef 声明了。
读者:我如何用 #if 表达式来判断机器是高字节在前还是低字节在前?
小林:恐怕你不能。(预处理运算仅仅使用长整型, 而且没有寻址的概念。) 你是否真的需要明确知道机器的字节顺序呢,通常写出与字节顺序无关的代码更好。
有时候,正是那些意想不到之人,成就了无人能成之事。
——图灵