mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Allgemeine Frage: Preprocessor


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es ist mir ein Missgeschick unterlaufen. Nach einem #define habe ich den 
Namen großgeschrieben und nach einem #ifdef kleingeschrieben.

...

#define BOOT_ARM

...

#ifdef BOOT_Arm

....

Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt?

Viele Grüße

Martin

Autor: astroscout (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spricht was dagegen, das kleimgeschriebene durch das Großgeschriebene zu 
ersetzen?
wenn es mehrere stellen im quelltext sind, gibr es dort ja die 
ersetzen-funktion

Autor: thorstendb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt?
#define BOOT_Arm BOOT_ARM

:-)

Autor: Mobius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, der Preprocessor ist case sensitive. Da hilft nur Search & 
Replace. Sollten alle Texteditoren ab Notepad können, bzw. einige können 
das auch in allen geöffneten Dateien gleichzeitig.

Oder aber du änderst dein define auf klein, je nachdem was weniger 
Arbeit macht ;).
gruß
Mobius

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt?
Trollig... :-/
#define BOOT_ARM
#define BOOT_Arm BOOT_ARM
Oder...
#define BOOT_ARM
#define BOOT_Arm

Aber ich würde "Suchen und Ersetzen" vorschlagen...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
thorstendb schrieb:

>> Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt?
>
> #define BOOT_Arm BOOT_ARM
> 

Sö, genau das geht eben nicht, wenn danach #ifdef statt #if verwendet 
wird. Denn BOOT_Arm ist auch dann definiert wenn BOOT_ARM nicht 
definiert ist.

Statt dessen wäre sowas nötig:
#ifdef BOOT_ARM
#define BOOT_Arm BOOT_ARM
#endif

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Denn BOOT_Arm ist auch dann definiert wenn BOOT_ARM nicht definiert ist.
Ja, das ist schade... ;-)
Aber dann würde ich das, um Speicherplatz zu sparen, eher so machen:
#ifdef BOOT_ARM
#define BOOT_Arm
#endif
Und um alle anderen naheliegenden Schreibweisen auch noch abzufangen 
gleich so:
#ifdef BOOT_ARM
#define BOOT_Arm
#define Boot_Arm
#define Boot_ARM
#endif

Autor: rogie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> A. K. schrieb:
>> Denn BOOT_Arm ist auch dann definiert wenn BOOT_ARM nicht definiert ist.
> Ja, das ist schade... ;-)
> Aber dann würde ich das, um Speicherplatz zu sparen, eher so machen:#ifdef 
BOOT_ARM
> #define BOOT_Arm
> #endif
> Und um alle anderen naheliegenden Schreibweisen auch noch abzufangen
> gleich so:#ifdef BOOT_ARM
> #define BOOT_Arm
> #define Boot_Arm
> #define Boot_ARM
> #endif


Und was ist, wenn irgendwo bOOt_aRm auftaucht?
Duck und wech

Autor: codehamster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Arme Boot...

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hoppla, da habe ich mich falsch ausgedrückt.

Gibt es einen allgemeinen Weg, Fehler (groß/klein) dieser Art 
abzufangen?

Zwei Wege den ich mir jetzt überlegt habe sind:

#ifdef BOOT_ARM
 C-Programmteil einfügen
#else
 Warnhinweis beim Compilieren ausgeben
#endif

... und ...

#ifdef BOOT_ARM_EIN
  C-Programmteil einfügen
#elif defined (BOOT_ARM_AUS)
  leere Anweisung
#else
  Warnhinweis beim Compilieren ausgeben, dass nicht gewählt wurde
#endif

Mit Lösung zwei kann ich mich anfreunden.

Autor: Ztalan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#error "This is the error"

#warning "I warned you before"

Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim gcc kann man -Wundef aktivieren, dann erhält man eine Warnung:
C:\MinGW\include\stdio.h 258 warning: no previous declaration for 'BLABLA'

Autor: Alex W. (a20q90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rogie schrieb:
> Und was ist, wenn irgendwo bOOt_aRm auftaucht?

Dann war ein ScriptKiddi am Code und Du kannst ihn eh vergessen...

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rogie schrieb:
> Lothar Miller schrieb:
>> Und um alle anderen naheliegenden Schreibweisen auch noch abzufangen
>> gleich so:#ifdef BOOT_ARM
>> #define BOOT_Arm
>> #define Boot_Arm
>> #define Boot_ARM
>> #endif
>
>
> Und was ist, wenn irgendwo bOOt_aRm auftaucht?
> *Duck und wech*

Kein Problem. Da wir ja Emacs zur Hand haben (oder nicht?), kann man
folgendes tun:
(defun permute-case (str)
  "Return list of strings which represent all permutations of str with
respect to character case of each element. Only letters `A' through
`Z' (`a' through `z') will be affected."
  (if (> (length str) 1)
      (append (mapcar '(lambda (s)
       (concat (downcase (substring str 0 1)) s))
          (permute-case (substring str 1)))
        (mapcar '(lambda (s)
       (concat (upcase (substring str 0 1)) s))
          (permute-case (substring str 1))))
    (list (downcase (substring str 0 1)) (upcase (substring str 0 1)))))


(defun cpp-define-all-cases (str value)
  "Define CPP macros for all case permutations of STR with a common
VALUE and insert the result into the current buffer at point. Both STR
and VALUE are strings."
  (interactive "sMacro: \nsValue: ")
  (insert (loop for s in (permute-case str)
      concat (concat "#define " s " " value "\n"))))

--
Marcus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.