代码之家  ›  专栏  ›  技术社区  ›  J. Titus

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

  •  0
  • J. Titus  · 技术社区  · 9 年前

    我在一个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
    

    有人能解释一下这里发生了什么吗?

    为了进一步参考,该代码用于 swig project 在GitHub上: luarun.swg:353 luarun.swg:364 .

    3 回复  |  直到 9 年前
        1
  •  5
  •   Edward Strange    9 年前

    静态字符串包含。“你好”“世界”与“你好世界”相同。

        2
  •  1
  •   london-deveoper    9 年前

    常量字符串被分类在一起

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

    #include <iostream>
    void f(const char* s) {
        std::cerr << s << std::endl;
    }
    
    int main() {
        f("sksksk" "jksjksj" "sjksjks");
    }
    

        3
  •  1
  •   Greg Kikola    9 年前

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

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

    这将输出“Hello World”。这仅适用于: 字面量 但是,不适用于变量:

    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");
    

    它还可以用于预处理指令,如示例中所示。