Allgemeine Frage: Preprocessor

Gast #1912172
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
Gast #1912185
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
Moderator (Firma: Titel) Persönliche Seite #1912204
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:
1
#ifdef BOOT_ARM
2
#define BOOT_Arm
3
#endif
Und um alle anderen naheliegenden Schreibweisen auch noch abzufangen 
gleich so:
1
#ifdef BOOT_ARM
2
#define BOOT_Arm
3
#define Boot_Arm
4
#define Boot_ARM
5
#endif
Gast #1912233
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
Gast #1912244
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.
Persönliche Seite #1912661
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:
1
(defun permute-case (str)
2
  "Return list of strings which represent all permutations of str with
3
respect to character case of each element. Only letters `A' through
4
`Z' (`a' through `z') will be affected."
5
  (if (> (length str) 1)
6
      (append (mapcar '(lambda (s)
7
       (concat (downcase (substring str 0 1)) s))
8
          (permute-case (substring str 1)))
9
        (mapcar '(lambda (s)
10
       (concat (upcase (substring str 0 1)) s))
11
          (permute-case (substring str 1))))
12
    (list (downcase (substring str 0 1)) (upcase (substring str 0 1)))))
13

14

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

--
Marcus

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