我有一个关于滥用 C 预处理器的问题,这个特定的例子与Linux系统上的gcc有关(如果这有所不同)。
我想做以下事情:
char filename[] = "hello.txt";
convert_and_include(filename);
其中convert_and_include将.txt的最后三个字符更改为.h,然后将hello.h作为头文件包含。我知道这听起来很奇怪,但我保证你有充分的理由想要这样做。
inline void convert_and_include(char filename[]) __attribute__((always_inline))
inline void convert_and_include(char filename[]){
// Error checking has been removed for clarity.
filename[6] = 'h';
filename[7] = '\0';
filename[8] = '\0';
#include AS_STRING(filename) // AS_STRING should evaluate to "hello.h"
}
答案 0 :(得分:6)
这是不可能的。
预编译器在编译之前运行。所有代码和功能都不为它所知/理解。
您可以执行的唯一字符串操作是预处理器本身完成的操作(基本上是字符串连接)。