这是 C 宏观怪异问题。
是否可以编写一个以字符串常量X(“...”)作为参数的宏,并计算相同长度的y,以使Y的每个字符都是X的相应字符的[常量]算术表达式。
这是不可能的,对吧?
答案 0 :(得分:5)
不,C预处理器认为字符串文字是单个标记,因此它不能执行任何此类操作。
您要求的内容应该在实际的C代码中完成。如果您担心运行时性能并希望在编译时委派此固定任务,现代优化编译器应该成功处理这样的代码 - 它们可以展开任何循环并预先计算任何固定表达式,同时使用代码大小和CPU缓存使用考虑到模式,预处理器不知道。
另一方面,您可能希望您的代码包含此类已修改的字符串文字,但不要或不需要原始代码 - 例如你希望有一个模糊的文本,你的程序将解码,你不希望在可执行文件中有原始字符串。在这种情况下,您可以使用一些构建系统脚本来执行此操作,例如,使用另一个C程序生成修改后的字符串,并在实际程序的C编译器命令行中将它们定义为宏。
答案 1 :(得分:0)
正如其他人已经说过的那样,预处理器将整个字符串视为标记。 _Pragma
运算符只有一个例外,它将字符串作为参数并对其内容进行标记以将其传递给#pragma
指令。
因此,除非您定位_Pragma
,否则在预处理阶段执行操作的唯一方法是将它们写为标记序列,操作它们并在最后对它们进行字符串化。