Einige Legacy-Code, an dem ich arbeite, hat ein Makro, das eine durch Kommas getrennte Liste zurückgibt, die als Funktionsargumente verwendet werden soll. Das ist hässlich, aber die Konfigurationsdatei enthält viele davon und es wäre schwierig, sie jetzt zu ändern.Splitten von Argumenten in C++ - Präprozessor
#define XY1 0,0
#define XY2 1,7
...
void fun_point(x,y);
fun_point(XY1);
Dies funktioniert gut, solange es eine Funktion aufgerufen wird. Wenn jedoch ein anderes Makro mit den Parametern aufzurufen versuchen, die gesamte Zeichenfolge als ein Argument betrachtet eher als Split im Komma in zwei Argumente
#define MAC_POINT(x,y) (x+y)
MAC_POINT(XY1) #not expanded by preprocessor
Gibt es eine Abhilfe für dieses Problem ohne die XY-Definitionen zu ändern?
/Ich schüttelt Faust bei Legacy-Code – icabod
Ich fand eine Diskussion oder dieses Problem in der GCC-Handbuch: http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html#Argument-Prescan – Quantum7