定义复合静态字符串

Defining composite static character strings

本文关键字:字符串 静态 复合 定义      更新时间:2023-10-16

在我的工作中,我最终编写包含静态const字符字符串的代码,通常是sql查询和/或绝对文件名等。有两个由共享字符串(日期)组成的字符串。这样的东西:

#include <iostream>
using std::cout;
using std::endl;
#define SPONGE "Sponge"
static const char SomeString[] = SPONGE "bob Squarepants!";
static const char SomeOtherString[] = "A dirty " SPONGE;
int main() {
   cout << SomeString << endl;
   return 0;
}

如果不使用Define语句,我有没有办法获得相同的结果?我想在一个位置中定义一个通用字符串,因此,如果我以后更改它,所有字符串将使用更新的值进行编译。

注意,这两个字符串都在可执行文件的只读段中:

 elfdump ./a.out  | grep Some
      [47]  0x00010d00 0x00000017  OBJT LOCL  D    0 .rodata        SomeString
      [49]  0x00010d1c 0x0000000f  OBJT LOCL  D    0 .rodata        SomeOtherString

这是我想保留的东西。

您不需要宏来连接两个字符串。只需一个又一个一个又一个地编写两个字符串文字即可。类似:

"Sponge" "bob Squarepants!";

是一样的。但是,如果要加入两个字符串文字的值,则必须使用strcat