Verwenden der C-Präprozessorverkettung, um die Zahl in Exponentialschreibweise zu erhalten

8

Warum funktioniert der Code?

%Vor%

ändert sich nach der Vorverarbeitung in:

%Vor%

und nicht in

%Vor%

? Ich vermute, es könnte sein, weil -1, + 1 als zwei Token (?) Analysiert werden. Wie aber erhalten Sie in diesem Fall das letztgenannte Ergebnis?

    
kwitek 12.07.2012, 13:40
quelle

3 Antworten

4

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.

    
Daniel Fischer 12.07.2012 14:37
quelle
3

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%     
user195488 12.07.2012 14:35
quelle
-1
%Vor%     
BLUEPIXY 12.07.2012 15:18
quelle

Tags und Links