Der folgende C++ Code kompiliert und arbeitet als Programmierer auf GCC bestimmt (4.0.4)Präprozessormakros als Parameter an andere Makros
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Jedoch verursachen die Makros einen Fehler auf Microsoft Visual C++ Express 2010:
main.cpp (7): Warnung C4003: nicht genug, um aktuelle Parameter für den Makro 'foo'
main.cpp (7): error C2059: Syntaxfehler: ')'
Das Problem scheint zu sein, dass der Microsoft-Compiler bei der internen Verarbeitung des BAR-Makros den BAZ-Makro nicht auf Parameter erweitert, die als zwei separate Parameter für Makro-FOO verwendet werden könnten.
Gemäß dem Standard, welcher Compiler behandelt die Situation korrekt?
Scheint so, als ob Sie wirklich suchen [Variadic Makros] (http://en.wikipedia.org/wiki/Variadic_macro). – leftaroundabout
@leftaroundabout es scheint nicht wie er ist ... –
@iammilind: Was fehlt in Kapitel 16 des Standards? Wie ist es kein "echter" Standard? –