函数调用参数列表中的空格(C ++)

时间:2017-01-24 18:32:41

标签: c++ swig

我在C ++项目中遇到了一些语法,我正在使用它并且不知道该怎么做。编译器不会抛出与此相关的任何错误:

lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);

注意[我假设的]函数参数之间的空格。

lua_pushstring的功能定义是

LUA_API const char *(lua_pushstring) (lua_State *L, const char *s);

SWIG_RUNTIME_VERSION#define等于"4"

SWIG_TYPE_TABLE_NAME在以下块中定义:

#ifdef SWIG_TYPE_TABLE
# define SWIG_QUOTE_STRING(x) #x
# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
#else
# define SWIG_TYPE_TABLE_NAME
#endif

有谁能解释这里发生了什么?

如需进一步参考,该代码用于GitHub上的swig projectluarun.swg:353luarun.swg:364

3 个答案:

答案 0 :(得分:5)

静态字符串连接。 "你好" "世界"与" Hello World"。

相同

答案 1 :(得分:1)

常量字符串拼凑在一起

以下代码生成的输出等于参数列表中的所有三个字符串。

#include <iostream>
void f(const char* s) {
    std::cerr << s << std::endl;
}

int main() {
    f("sksksk" "jksjksj" "sjksjks");
}

答案 2 :(得分:1)

C ++(和C)将自动连接相邻的字符串文字。所以

std::cout << "Hello " "World" << std::endl;

将输出&#34; Hello World&#34;。这仅适用于文字,而不适用于变量:

std::string a = "Hello ", b = "World";
std::string c = a b //error, use a + b

您可以将std::string operator+用于此目的(或strcat,但如果可以的话,请避免使用此情况。)

当我们有一个非常长的字符串文字并不适合一行时,此功能非常有用:

process_string("The quick brown fox jumps over "
               "the lazy dog");

它也可以用于预处理指令,如您的示例所示。