Hallo zusammen, ich habe eine vermutlich relativ einfache Frage, aber die Suche (im Forum oder auch global bei google) liefert leider nicht das Ergebnis das ich haben möchte, da das Thema mit den Postings von speziellen Fehlermeldungen leider völlig überlagert ist. Ich schreibe mir grade ein paar kleine C ++ Bibliotheken für einen XMEGA Controller und ich benutze WIN AVR Studio 6.2 mit GCC. Dabei benutze ich diverse Switch Anweisungen. Jetzt hätte ich gerne eine Art Fehlermeldung die mir der Compiler an den Kopf schmeißt wenn ich bei der dem Default Block angekommen bin. Ein Beispiel: switch (nummer) { case 0: bliblablub break; case 1: ladida break; ... ... ... case 7: trallala break; default: #Ausgabe in der Errorlist: Ein Port hat nur die Pins 0-7 du Depp! } Ich würde mir gerne also in dem Fenster wo normalerweise die Kompilierfehler stehen eine Error Message ausgeben lassen. Ich vermute mal dass es da eine Möglichkeit gibt, oder?
So vielleicht? https://gcc.gnu.org/onlinedocs/gcc-4.5.0/cpp/Diagnostics.html Und statt 0..7 würde ich Enums nehmen, dann wird schon vorher der Fehler offenbar, nämlich wenn kein entsprechender Eintrag vorhanden ist.
Hallo, erstmal vielen Dank für die schnelle Antwort. Habe jetzt default: #ifdef _DEBUG #error "Du Depp Nur Ports 0-7 waehlen." #endif // _DEBUG eingefügt, was aber nur Fehlermeldungen erzeugt. 'ifdef' was not declared in this scope.... Ich vermute mal da muss noch eine Bib included werden? Mit enum könnte eine gute Idee sein, würde es aber gerne grade mal so hinkriegen, damit ich hier einen Teil fertig & verstanden habe.
Bastian R. schrieb: > eingefügt, was aber nur Fehlermeldungen erzeugt. 'ifdef' was not > declared in this scope.... Ich vermute mal da muss noch eine Bib > included werden? oder jemand sollte erst mal ein C buch lesen.
Der Fehler den du abfangen willst steht erst zur Laufzeit fest, kann also vom Compiler nicht erkannt werden.
Ahso, nagut. Vielen Dank für die Mühe, erklärt zumindest warum nirgendswo was dazu steht. Frohes schaffen noch.
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html "-Wswitch" und folgende Besser geht es zur Compile-Zeit nicht. Vielleicht hilft auch das: http://en.cppreference.com/w/cpp/language/static_assert Braucht aber Konstanten, also #defines oder Template-Parameter:
1 | #include <iostream> |
2 | #include <type_traits> |
3 | |
4 | using namespace std; |
5 | |
6 | template <int number> class Pin |
7 | {
|
8 | public:
|
9 | Pin(){}; |
10 | void set() |
11 | {
|
12 | static_assert((number >= 0) && (number <= 7), "Moep, alles falsch!"); |
13 | switch (number) |
14 | {
|
15 | case 1: cout << "1"<<endl; break; |
16 | default: cout << "nicht 1"<<endl; break; |
17 | };
|
18 | }
|
19 | };
|
20 | |
21 | int main() { |
22 | Pin<1> foo; |
23 | Pin<42> blaa; |
24 | foo.set(); |
25 | blaa.set(); |
26 | return 0; |
27 | }
|
Danke auch für diesen Hinweis. Werde ich bei Gelegenheit mal ausprobieren.
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.