C++ 在C+中使用#定义字符串+;
在尝试使用cURL上传图像时,由于下面的代码,我感到困惑C++ 在C+中使用#定义字符串+;,c++,curl,C++,Curl,在尝试使用cURL上传图像时,由于下面的代码,我感到困惑 #define UPLOAD_FILE_AS "testImage.jpg" static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS; 我想了解的是 定义的上传文件\u的确切类型为:字符数组/字符串/或其他什么 在第二行中执行的精确操作:在第二行之后,buf_1变为“RNFR testImage.jpg”。但是第二行在“RNFR”和上传文件作为之间
#define UPLOAD_FILE_AS "testImage.jpg"
static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS;
我想了解的是
上传文件\u的确切类型为
:字符数组/字符串/或其他什么“RNFR testImage.jpg”
。但是第二行在“RNFR”
和上传文件作为
之间只有一个空格。我从来没有听说过空格可以代替“+”运算符或合并函数。这怎么可能“
中。没有类型。宏在编译器(及其类型的概念)开始实际编译之前展开
define
不创建变量,因此没有类型的概念。在编译源文件之前,会运行预处理器。它会用它的值(“testImage.jpg”
)替换宏的所有实例,即上载文件为。
换句话说,在预处理器阶段之后,您的代码如下所示:
static const char buf_1[]=“RNFR”“testImage.jpg”;
和C++字符串自动展开,这两个字符串都变成了:<代码>“RNFR作证”。您可以在这里找到更好的解释:,主要是:
并排放置的字符串文本在转换阶段6(在预处理器之后)连接起来。也就是说,“Hello”,“world!”生成(单个)字符串“Hello,world!”。如果两个字符串具有相同的编码前缀(或两者都没有),则生成的字符串将具有相同的编码前缀(或没有前缀)
定义的上载文件的确切类型为
没有类型。它不是一个变量。这是一个宏。宏完全存在于类型系统之外
预处理器用宏的定义替换宏的所有实例。有关示例,请参见下一段
在第二行执行精确操作
操作是宏替换。预处理文件后,第二行变为:
static const char buf_1 [] = "RNFR " "testImage.jpg";