2017-01-24 2 views
0

Ich bin in einem C++ - Projekt, mit dem ich arbeite, auf eine Syntax gestoßen und weiß nicht, was ich davon halten soll. Der Compiler wirft keine Fehler in diesem Zusammenhang:Leerzeichen in Funktionsaufruf Parameterliste (C++)

lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); 

Hinweis die Räume zwischen [was ich davon ausgehen, werden] die Funktionsparameter.

Die Funktionsdefinition für lua_pushstring ist

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

SWIG_RUNTIME_VERSION ein

#define gleich "4" ist SWIG_TYPE_TABLE_NAME wird im folgenden Block definiert:

#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 

Kann mir jemand erklären, was los ist Hier?

Als weitere Referenz wird der Code in der swig project auf GitHub verwendet: luarun.swg:353 und luarun.swg:364.

+1

Ich bin mir nicht sicher, ob ich die Frage verstehe. '" abc "" 123 "' verkettet die beiden Strings: '" abc123 "' – ZDF

+1

Wissen Sie, was der "stringizing" Operator ('#') in einem Makro macht? Viele Links hier und anderswo mit diesen Informationen. – PaulMcKenzie

+0

@PaulMcKenzie Ist das, wofür das '#' symbol ist? –

Antwort

5

Statische String-Verkettung. "Hallo" "Welt" ist das gleiche wie "Hallo Welt".

+0

Lernen Sie jeden Tag etwas Neues. Vielen Dank. –

1

Die konstanten Strings zusammen

Der folgende Code erzeugt eine Ausgabe gleich alle drei Saiten in der Parameterliste cat'ed.

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

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

1

C++ (und C) automatisch benachbarte Stringliterale verketten. Also

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

wird "Hallo Welt" ausgeben. Dies gilt nur für Literale aber nicht auf Variablen:

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

Sie std::string ‚s operator+ zu diesem Zweck verwenden können (oder strcat, aber vermeiden, dass, wenn Sie können).

Diese Funktion ist vor allem dann nützlich, wenn wir eine wirklich lange Stringliteral haben, die nicht auf eine Zeile passt:

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

Es ist auch mit Vorverarbeitung Richtlinien, wie in Ihrem Beispiel nützlich sein kann.

Verwandte Themen