操作char []并将结果包含为头文件

时间:2015-09-14 20:45:25

标签: c c-preprocessor

我有一个关于滥用 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"
}

1 个答案:

答案 0 :(得分:6)

这是不可能的。

预编译器在编译之前运行。所有代码和功能都不为它所知/理解。

您可以执行的唯一字符串操作是预处理器本身完成的操作(基本上是字符串连接)。