【发布时间】:2010-11-26 10:23:47
【问题描述】:
免责声明:我不是 C 程序员。
我最近看到了一个朋友的项目。由于我不明白的原因,他在运行时编译的字符串中编写代码。结果如下:
char x[] = "int y = 5; printf(\"%i\", y)";
run_this_code(x);
使用起来很糟糕,因为 Visual Studio 不会介入并进行语法高亮等操作。
使用一些预处理器滥用,有可能欺骗 Visual Studio 使其认为您正在编写真正的代码,然后让预处理器在编译器获取您的源代码之前将其转换为字符串。这有效:
#define STRINGIFY(x) #x
int main(void){
char[] y = STRINGIFY(
int x = 5;
printf("%i", x);
);
printf("%s", y);
}
这个问题是打印出来的:
int x = 5; printf("%i\n", x);
那么问题是运行时编译器在第 1 行显示错误。有没有办法让它包含换行符?
更新这不是我的问题。这是别人的代码,我只是对使用预处理器让他的生活更轻松的想法产生了兴趣。我不知道他为什么要这样做。
更新删除了对 CUDA 的所有提及,因为这个问题是关于预处理器的,而不是 CUDA。
【问题讨论】:
-
这不起作用吗? char x[] = "int x = 5;\n printf(\"%i\", x)";
-
我想要做的目标是欺骗VS进入语法高亮,“智能感知”等写入字符串的代码。
-
你想做什么?如果您尝试从 GPU 将内容打印到标准输出,我认为您没有走在正确的轨道上......
标签: c c-preprocessor stringification