Sie haben Recht, -1
und +1
sind zwei Vorverarbeitungstoken, daher wird nur die erste in e
eingefügt.
Für mich,
%Vor%hat mit gcc-4.5.1 funktioniert.
Ich denke, das Problem, in das Sie geraten, wird als undefiniertes Verhalten betrachtet. Pro gcc 4.3.2 Dokumentation zur Konzessionierung :
Allerdings können zwei Token, die nicht zusammen ein gültiges Token bilden, nicht sein zusammengeklebt. Zum Beispiel können Sie x nicht mit + in verketten entweder bestellen. Wenn Sie es versuchen, gibt der Präprozessor eine Warnung aus und gibt sie aus die zwei Token. Ob es einen Leerraum zwischen den Tokens gibt, ist nicht definiert. Es ist üblich, unnötige Verwendungen von ## im Komplex zu finden Makros. Wenn Sie diese Warnung erhalten, ist es wahrscheinlich, dass Sie einfach Entferne die '##'.
Siehe auch diese Antwort zu SO, die das gleiche Problem aufweist.
Bearbeiten:
Ich habe es geschafft, dass dies funktioniert, aber Sie brauchen zwei Makros für + und -
%Vor%Tags und Links c-preprocessor concatenation