Klaus W. schrieb:
> Komisch. Ich habe es eben mal mit gcc für amd64 probiert, da geht es so
> wie du es schreibst (aber bei der Verwendung des Arguments Gänsefüßchen
> dazu genommen):
>
1 | > .macro blabla string
|
2 | > .KLAUS:
|
3 | > .string "\string"
|
4 | > .endm
|
5 | > ...
|
6 | > blabla "test"
|
7 | > ...
|
8 | >
|
>
> Zum Testen habe ich ein kleines C-Programm gemacht, das mit puts() was
> ausgibt.
> Dann in den erzeugten asm-Code das obige eingefügt und stattdessen den
> String "test" ausgeben lassen über das Label .KLAUS
> Das ist als a.c und a.s (mit gcc aus a.c erzeugt, dann wie beschrieben
> geändert) im Anhang.
> Also sollten bei dir doch nur die Gänsefüßchen fehlen?
Hmm ich wollte grad schreiben, dass dein Makro bei mir auch wieder den
gleichen Fehler wirft:
1 | /tmp//cc2UHizX.s: Assembler messages:
|
2 | /tmp//cc2UHizX.s: Warning: unknown escape '\s' in string; ignored
|
Und da fiel mir zum ersten Mal auf, dass das gar kein Fehler, sondern
eine Warnung ist. Der hat das Teil letztendlich kompiliert. Ich habe mir
das binfile angeschaut und da steht tatsächlich test drin und nicht
string. Also funktioniert es so, wie es soll. Nur die Warning ist
irgendwie völlig daneben. Kann man die einfach abschalten?
Ich weiss echt nicht, was der intern da genau macht. Im zu
kompilierenden Code sollte nirgendwo der String "\string" stehen. Das
wird ja vom Makro ersetzt. Es wirkt fast so, als würde erst der
Sanity-Check kommen und danach die Makros ausgeführt werden. Das ist
eigentlich nicht richtig so. Und irgendwie glaube ich auch nicht, dass
das so ist.....
Ufff....
Help :(