使用C中的#if进行转换

Min*_*mir 3 c casting compiler-errors c-preprocessor

为什么此代码会出错:

#include <stdio.h>
#define Rep (int)6
int main(){
     #if Rep==6
         printf("T");
     #else
         printf("F");

     #endif

return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么拒绝铸造呢?
  2. 它是'预处理器错误'还是'编译器错误'?

vll*_*vll 6

这是预处理器错误.这是因为预处理器不了解如何转换变量.您不能使用任何C代码#if,只需简单的数字,或扩展为数字的宏.

如果你不能修改Rep,你可以使用一个帮助宏来解决这个问题,它从头开始删除了转换:

#include <stdio.h>

#define X(x)
#define Y(x) X x
#define Rep (int)6

int main(void) {
#if Y(Rep) == 6
    printf("%d\n", Y(Rep)); // prints 6
#endif
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 那是一个狡猾的小宏观. (5认同)