【发布时间】:2011-10-24 08:07:28
【问题描述】:
我正在做一个项目,有一个我认为可以用宏解决的问题,但考虑到问题的性质,我没有经验自己写一个。
这是我期望的 #define 宏的输入和输出:
输入这样的代码
printf(foobar(Hello World.));
应该导致预处理器生成如下代码:
printf((char *)(std::string("")+'H'+'e'+'l'+'l'+'o'+' '+'W'+'o'+'r'+'l'+'d'+'.').c_str());
我假设这种复杂的事情是可能的,我希望你们中的一个可以帮助我。
我需要它是一个宏,我不想在任何地方使用字符串常量。
【问题讨论】:
-
这基本上是一个“字符串常量”,除了终止的零(虽然你有一个用于“”)。你想达到什么目的,为什么要避免使用字符串常量?
-
我不敢问在什么情况下这可能有意义......(你的实际要求是什么,让它产生特定的输出或在预处理器运行之前没有文字?)
-
仅供参考
std::string()比std::string("")更好。你到底为什么要投给char*?我对人们所做的所有聪明事情感到惊讶,没有办法在宏中进行任何字符串操作。但真的,如果你不想听到这个,很抱歉,但最好避免使用宏。 -
您不能,您将任意字符串放入宏中。您是否认为程序员可能使用
hi:-)而不是Hello World.,hi:-)中的右括号怎么样? -
预处理器并没有你想象的那么强大。不过,您可以使用单独的程序将您的
Hello World.转换为您想要的格式。
标签: c++ string c-preprocessor