Problem mit __extension__ und __attribute__

Gast #3327473
Lesenswert?

Hi

Ich brauche von meinen Code den Output des Preprocessors. Dafür verwende 
ich das Flag -E beim gcc und leite den Output in eine Datei um. Das 
Funktioniert auch sehr gut. Diesen Ouptu übergebe ich anschliesend einen 
Parser und dieser hat Probleme mit den Erweiterungen _extension_ und 
_attribute_. Meine Frage ist es daher ob ich diese Erweiterungen 
irgendiwe ausblenden kann?! Folgende Parameter werden den gcc übergeben:

-E -nostdinc -Wall -std=gnu99 -pedantic

Danke im Vorhinein für alle Antworten.

mfg Harald
Gast #3327511
Lesenswert?

Ok wenn ich die beiden folgenden Flags dazugebe geht es.

-D "__extension__=" -D"__attribute__(args)="

Allerdings sagt er dann das __gnuc_va_list Probleme macht. Der Code ist 
ein normaler C code und der Parser ist pycParser in Python.

mfg Harald
Gast #3534362
Lesenswert?

Ich weiß das Thema ist zwar schon älter aber ich würde mich 
interessieren ob man diese ganzen gcc spezifischen Ausdrücke wie 
_extension_, _attribute_, und so weiter irgendwie automatisch 
deaktivieren kann. Sprich das man einen Code nach den Preprozessor erhät 
der keine dieser Ausdrücke beinhaltet. Das mit -D geht zwar aber es gibt 
ja doch recht viele solcher Ausdrücke. Habe leider bisher nichts 
gefunden daher meine Frage?

mfg Harald
Gast #3535928
Lesenswert?

fresh schrieb:
> Ich weiß das Thema ist zwar schon älter aber ich würde mich
> interessieren ob man diese ganzen gcc spezifischen Ausdrücke wie
> extension, attribute, und so weiter irgendwie automatisch
> deaktivieren kann.

Was meist du mit "deaktivieren"? Wenn diese in deinem Code drin stehen, 
stehen sie eben drin. "Deaktivieren" kannst du sie, indem du sie nicht 
reinschreibst.

> Sprich das man einen Code nach den Preprozessor erhät
> der keine dieser Ausdrücke beinhaltet.

Der Preprozessor beachtet die gar nicht, denn mit denen hat er absolut 
nichts am Hut. Das ist für ihn Code, den er einfach durchreicht.
Gast #3537937
Lesenswert?

Hi

Hätte gehoft das man beim Preprozessor mit einen Flag deaktivieren kann. 
Ich habe es in meinen Code eh nicht drinnen aber die ganzen Standard 
Headers haben es drinnen. Die Idee mit den defines ist sicher gut aber 
kann ich das so einfach für die Standard Headerdateien wie stdio.h oder 
ähnliches auch anwenden?!

mfg fresh
Gast #3538266
Lesenswert?

Naja ich brauch den Output vom Preprozessor als Input für einen Parser 
und der hat Probleme mit diesen Erweiterungen. Aber was ich jetzt so 
gesehen habe ist das Format der Erweiterungen immer _ERWEITERUNG_ 
(optinal()) also versuche ich gerade diese einfach mittels eines eigenen 
Tools herauszulöschen und vielleicht gehts dann.

mfg Fresh
Gast #3573135
Lesenswert?

Hi
Wenn ich -D'__asm__(args)=' mit übergebe werden alle __asm__(xxx) 
gelöscht nun gibt es aber noch _asm_ ohne argumente welche er im Code 
drinnen läst. Dachte ich schreibe einfach noch -D'__asm__=' dazu und es 
geht aber das sieht er dann als redifinition. Gibt es da irgendwie eine 
andere Möglichkeit?!
1
Wall -std=gnu99 -pedantic -E -D'__extension__=' -D'__attribute__(args)=' -D'__asm__=' -D'__asm__(args)=' -D'__builtin_va_list=int' -D'__restrict=' -D'__const=' -D'__inline=' -D'__volatile__='
#3573144
Lesenswert?

Harald schrieb:
> Hi
> Wenn ich -D'__asm__(args)=' mit übergebe werden alle __asm__(xxx)
> gelöscht nun gibt es aber noch _asm_ ohne argumente welche er im Code
> drinnen läst. Dachte ich schreibe einfach noch -D'__asm__=' dazu und es
> geht aber das sieht er dann als redifinition. Gibt es da irgendwie eine
> andere Möglichkeit?!

Schön langsam frag ich mich schon, ob es nicht einfach wäre, den Parser 
zu pimpen.
Denn dadurch, das du zb. den __asm__(xxx) Teil aus dem Code löscht, wird 
ja nicht automatisch der ganze weitere Rest der Assembleranweisungen, 
die sich über die nächsten 20 Zeilen hinziehen, entfernt.

Wohingegen es bei einem halbwegs vernünftigen Parser normalerweise keine 
Schwierigkeiten machen sollte, alles nach einem _asm_ (mit einer 
eventuellen Argumentliste) von der ersten öffnenden { bis zur letzten 
schliessenden } zu ignorieren.

Was ist denn das für ein Parser?
Selbst geschrieben?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren