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
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
> Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt?
1 | #define BOOT_Arm BOOT_ARM
|
:-)
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
Martin schrieb: > Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt? Trollig... :-/
1 | #define BOOT_ARM
|
2 | #define BOOT_Arm BOOT_ARM
|
Oder...
1 | #define BOOT_ARM
|
2 | #define BOOT_Arm
|
Aber ich würde "Suchen und Ersetzen" vorschlagen...
thorstendb schrieb: >> Gibt es einen Weg, dass das der Compiler/Preprocessor dies erkennt? >
1 | > #define BOOT_Arm BOOT_ARM |
2 | >
|
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:
1 | #ifdef BOOT_ARM
|
2 | #define BOOT_Arm BOOT_ARM
|
3 | #endif
|
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
|
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
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.
Beim gcc kann man -Wundef aktivieren, dann erhält man eine Warnung:
1 | C:\MinGW\include\stdio.h 258 warning: no previous declaration for 'BLABLA' |
rogie schrieb: > Und was ist, wenn irgendwo bOOt_aRm auftaucht? Dann war ein ScriptKiddi am Code und Du kannst ihn eh vergessen...
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.