Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: doppelte #defines sollten einen Compilefehler auslösen Kategorie: Programmierung C (von Franz-Peter - 16.12.2010 12:53)
Als Antwort auf Re: doppelte #defines sollten einen Compilefehler auslösen von Jo - 16.12.2010 12:10
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > > Hallo zusammen,
> > > ich bin der Meinung, dass das doppelte definieren einer Konstante über #define
> > > nicht erlaubt sein sollte und es der Compiler abfangen müsst.
> > >
> > > also > >
> > > #define MAX 10
> > >
>  ...
> > > #define MAX 20
> > >
> > > darf der Compiler nicht zulassen.
> > > Was ist euere Meinung dazu? Was meinst du PeterS?
> > >
> > > Viele Grü�e > >
>  > > Jo
> > > Hallo Jo, Hallo miteinander,
> > die Möglichkeit einen #define zu redefinieren ist meiner Meinung nach kein Bug, sondern ein Feature,
> > dass auf jeden Fall erhalten bleiben sollte. Das ist durchaus üblich so, und es gibt auch einige
> > Anwendungsfälle dafür.
> > Der eingesetzte GNU Preprozessor lässt die Redefinition eines #define auch ausdrücklich zu.
> > Ich habe das schon genutzt.
> > > GruÃ?
> > Franz-Peter
>
> Hallo Franz-Peter,
> da möchte ich dir wiedersprechen...
> in jedem C-Dialekt den ich kenne ist das nicht erlaubt. Aber es gibt die Möglichkeit
> #undefine eine defintion wissentlich aufzuheben.
> Den Mehrwert allerdings #defines an unterschiedlichen Stellen neu zu verwenden kann ich mir nicht
> vorstellen.
> Viele Grü�e
>
> Jo

Hallo Jo,
der in der IDE eingesetzte Preprozessor wird ja nicht nur für die CC-Pro IDE eingesetzt,
und der erlaubt das explizit. Da steht in der Beschreibung ausdrücklich, dass Redefinitionen
unterstützt werden. Wie Joerg schreibt, lässt auch Visual Studio das zu (eine Warnung ist ok und
verhindert die Ausnutzung ja nicht ).
Ich habe so etwas schon mal ausgenutzt, indem ich eine Datei mehrmals mit Include eingebunden habe,
und mit entsprechend unterschiedlichen defines an einigen wesentlichen Stellen angepasst habe.
Das war zwar nicht im CC-Pro Umfeld, ich könnte mir da aber durchaus ähnliches vorstellen.

Grundsätzlich hast Du insofern Recht, dass es sicher weniger fehlerträchtig ist, wenn man
vor einem Redefine das Symbol vorher mit #undefine explizit wieder freigeben muss. Damit könnte
man ein bewusstes Redefine von einem versehentlichen, fehlerhaften unterscheiden.
GruÃ?
Franz-Peter


    Antwort schreiben


Antworten: