Lowlevel

OffZone => Offtopic => Thema gestartet von: YoshiX650 am 13. December 2013, 08:47

Titel: Warning: empty character constant ?
Beitrag von: YoshiX650 am 13. December 2013, 08:47
Guten Morgen,
ich lese grade von osdever.net eine Anleitung zum erstellen eines mini-mini-mini-... Betriebssystem.
Leider kriege ich eine Fehlermeldung wenn ich das ganze compilen will.
Fehler:http://goo.gl/dZggMt (http://goo.gl/dZggMt)
Was kann ich tuen?

LG

PS: Mein Compiler ist GCC und mein System ist ein Mac
Titel: Re: Warning: empty character constant ?
Beitrag von: Jidder am 13. December 2013, 09:11
Hi,

er will dir sagen, dass du ' ' (mit Leerzeichen) statt '' schreiben sollst. Oder gleich videomem[i] = 0x0700;, da sowohl Leerzeichen wie auch '\0' nicht sichtbar sind.
Titel: Re: Warning: empty character constant ?
Beitrag von: YoshiX650 am 13. December 2013, 10:47
Okay,
kann es sein das, das Tutorial etwas kaputt ist?
Hab beim compilen des Kernels gleich wieder ein Fehler.
Titel: Re: Warning: empty character constant ?
Beitrag von: streetrunner am 13. December 2013, 11:22
Das Tutorial ist nicht zum abschreiben gedacht (man sollte eher sagen nicht zum kopieren). Ein wenig Eigenleistung ist schon erforderlich, aber wirklich schwerwiegende Fehler hab ich bis jetzt nicht entdeckt. Was nicht heißen soll dass es keine geben könnte.

Zitat
Hab beim compilen des Kernels gleich wieder ein Fehler.
Wenn du uns verrätst welchen Fehler du hast findet sich bestimmt einer der ihn ausbessert.  :-)
Titel: Re: Warning: empty character constant ?
Beitrag von: YoshiX650 am 13. December 2013, 11:50
Der Fehler: http://goo.gl/7h4DQV

Ich schreibe übrings alles ab.
Titel: Re: Warning: empty character constant ?
Beitrag von: Svenska am 13. December 2013, 13:55
Du sollst das Tutorial weder kopieren noch unverstanden abschreiben. :-)

Es ist uebrigens besser, statt einem Foto der Fehlermeldung einfach den Text der Fehlermeldung hier reinzukopieren (z.B. in Code-Tags) und am besten noch gleich den betreffenden Code dazu.

Beide Compilerausgaben sind keine Fehler, sondern nur Warnungen. Im zweiten Fall deklarierst du eine Funktion mit einem Rueckgabewert, hast aber kein return in der Funktion drin - im ersten Fall handelt es sich um den Hinweis, dass ein Stringliteral in C++ nicht mehr automatisch in einen normalen C-String umgewandelt werden sollte. Ueberhaupt ist C++ im Kernel immer so eine Sache: Wenige Dinge funktionieren, viele Features brauchen aber eine Laufzeitunterstuetzung (z.B. funktionierende Speicherverwaltung, Multithreading), und manche Eigenschaften sind in einem Kernel nicht wirklich nutzbar.

Wenn du dich mit den Details nicht auskennst, ist es vermutlich erstmal einfacher, bei C zu bleiben.

Gruss,
Svenska
Titel: Re: Warning: empty character constant ?
Beitrag von: MNemo am 13. December 2013, 14:19
Die Bezeichnung Stringliteral ist hier einwenig irreführend. Mein g++ spricht von string constant. Das Problem ist das ein "String wie dieser" konstant ist, und der korrekte Type const char* ist.

Folgender code segfaultet z.B. weil "abc" in einer read-only section liegt. (g++ meckert, gcc nicht)
int main() {
  char* a = "abc"
  a[0] = 'b';
  return 0;
}
Titel: Re: Warning: empty character constant ?
Beitrag von: streetrunner am 13. December 2013, 23:24
Das würde ich aber unter Compiler-Fehler verbuchen, da du in deinem Code ja extra NUR char* als Typ angegeben hat und der Compiler merken sollte dass du deinen String beschreibst (welcher ja mit eignedlich nichts anderes als ein array ist)
Titel: Re: Warning: empty character constant ?
Beitrag von: Svenska am 13. December 2013, 23:51
Überrascht mich auch etwas, aber das knallt tatsächlich. :?
Ersetzt man *a durch a[], funktioniert es.
Schreibt man const davor, gibt es in beiden Fällen einen Compilerfehler (logisch).
Titel: Re: Warning: empty character constant ?
Beitrag von: kevin am 15. December 2013, 13:45
char[] ist ja auch was anders als char*. Ersteres erzeugt ein neues Array, das nur mit dem Literal initialisiert wird, während letzteres ein Pointer direkt auf das Literal ist.

Und zu Stringliteralen steht in C11, 6.4.5, Absatz 7:
Zitat
It is unspecified whether these arrays are distinct provided their elements have the
appropriate values. If the program attempts to modify such an array, the behavior is
undefined.