Forum: Compiler & IDEs Eigene Fehlerausgaben in AVR Studio


von Bastian R. (louie)


Lesenswert?

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?

von MWS (Gast)


Lesenswert?

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.

von Bastian R. (louie)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von ui (Gast)


Lesenswert?

Der Fehler den du abfangen willst steht erst zur Laufzeit fest,
kann also vom Compiler nicht erkannt werden.

von Bastian R. (louie)


Lesenswert?

Ahso, nagut. Vielen Dank für die Mühe, erklärt zumindest warum 
nirgendswo was dazu steht.
Frohes schaffen noch.

von Tom (Gast)


Lesenswert?

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
}

von Bastian R. (louie)


Lesenswert?

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
Noch kein Account? Hier anmelden.