C++预处理器如何用于字符串
How can the C++ Preprocessor be used on strings?
预处理器可用于使用#define
将某些关键字替换为其他单词。例如,我可以执行#define name "George"
,每次预处理器在程序中找到"name"时,它都会将其替换为"George"。
然而,这似乎只适用于代码。我怎么能用字符串和文本做到这一点?例如,如果我在屏幕上打印"Hello I am name",我希望"name"被替换为"George",即使它是字符串而不是代码。
我不想手动搜索字符串中的关键字,然后替换它们,而是想使用预处理器来切换单词。
这可能吗?如果是,怎么办?
我使用C++,但C解决方案也是可以接受的。
#define name "George"
printf("Hello I am " name "n");
在C和C++中,相邻的字符串文字连接在一起。
来自C和C++标准的报价:
对于C(引用C99,但C11在6.4.5p5中有类似内容):
(C99,6.4.5p5)"在翻译阶段6,由任何相邻字符序列和前缀相同的字符串文字标记指定的多字节字符序列被连接到单个多字节字符串中。"
对于C++:
(C++11,2.14.5p13)"在翻译阶段6(2.2),相邻的字符串文字被连接起来。"
编辑:根据要求,添加C和C++标准中的引号。感谢@MatteoTalia对C++11的引用。
#define name "George"
printf("Hello I am %sn", name);
此处的名称将替换为"George"
您的问题是预处理器不会(明智地)替换字符串文本中的标记。
因此,您必须使用类似printf
的函数或变量而不是预处理器,或者从字符串中提取令牌,如:
#include <iostream>
#define name "George"
int main(int argc, char** argv) {
std::cout << "Hello I am " << name << std::endl;
}
相关文章:
- C++ 虽然语句不适用于字符串和"or"
- 函数模板不适用于字符串文本
- 我应该将unique_ptr用于字符串
- C++ rand() 不适用于字符串数组
- 用于字符串比较的动态编程
- 出乎意料的差执行时间,用于字符串串联函数
- 为什么 std::大写不适用于字符串?
- C 优化用于字符串比较和替换
- 为什么我可以重载 istream 的运算符>>用于字符串?
- "cout"不适用于字符串
- std::bind 不适用于字符串向量
- 在C++中创建用于字符串操作的哈希表
- C++预处理器如何用于字符串
- 如果函数调用导致引用传递,为什么要将共享指针用于字符串?
- c++中用于字符串优先级队列的未排序双链表
- c++中用于字符串数组的qsort
- 用于字符串的容器和用于匹配和计数的int型容器
- c++中是否有用于字符串的removeAt函数?
- 模板中的构造函数不同:一个用于字符串,另一个用于其他任何东西
- Str.compare()或(string)A == (string)B用于字符串比较