Errors



  • MasterCounter schrieb:

    Verwende als Datentyp BOOL (nicht bool), musst dann evt. noch windows.h includieren... und schreib es vieleicht mal groß (FALSE TRUE)
    vielleicht funktionierts!

    oder mach es halt mit 0 und 1. 😃

    Wenn wir hier damit anfangen, muss ich kotzen. 👎

    C kennt bool nicht, außer wenn man nach C99 programmier, wo man stdbool includieren muss. Wieso ist das so schwer zu begreifen?



  • Tu das bitte und nachdem ihr euch beruhigt habt merkt ihr, dass hinter der WinAPI-"Kacke" auch nicht viel mehr steckt als das was stdbool macht.

    MfG SideWinder



  • SideWinder schrieb:

    Tu das bitte und nachdem ihr euch beruhigt habt merkt ihr, dass hinter der WinAPI-"Kacke" auch nicht viel mehr steckt als das was stdbool macht.

    Exceptional C++ gelsen? bezüglich der Probleme eines #defines für bool?

    Naja, aber stdbool.h definiert einen Native Typen _Bool - der ist wohl der WinAPI Kacke (warum Plattformunabhängigkeit aufgeben, weil man bool will? noch dazu wenn dieses bool dann BOOL heisst, was nichtmal in C reinpasst (alle typen sind dort nämlich klein geschrieben) überlegen.

    Wenn man bool in C89 braucht, dann bitte selber typedef anlegen - wobei man dann normalerweise gleich int verwenden kann...



  • Von wegen plattformunabhängigkeit.

    Wieso nennen sie den dämlichen Datentyp auch "_Bool" und nicht "bool" - damit C weiter eine Untermenge von C++ bleibt. Dann könnte man sich C sparen und in C++ entweder funktional oder objektorientiert programmieren. Nein da hat man sich gedacht "How to rescue *my* language?". Also mal schnell Dinge einführen die es in C++ nicht gibt und schon braucht man wieder einen eigenen Compiler für C.

    Das ist natürlich sehr toll - alleine schon weil man seit neuestem Grunddatentypen includieren muss 😕

    Auf was ich raus will: Auf der einen Seite martern sie alle anderen bool-Datentypen per #define an die früher gemacht wurden weil es in C kein bool gab. Man soll jetzt den Standard-Typ nehmen weil der eben Standard ist. Auf der anderen Seite haben sie bei der Einführung ihres Standard-Typs peinlich genau darauf geachtet das der mit nichts mehr kompatibel ist was bisher war.

    BTW: In C sind ja offenbar nicht mehr alle Typen kleingeschrieben...

    MfG SideWinder



  • @SideWinder
    die Sache ist einfach, dass bool so häufig benötigt wird, dass so gut wie jedes Projekt dafür einen Workarround hat. Hätte man nun mit C99 einfach bool eingeführt, wäre es zu Konflikten gekommen. Also _Bool nehmen (da es im reservierten Namespace liegt, den man ansonsten nicht benutzen darf) und für bool dann eben ein eigener Header

    #ifndef cplusplus
    #include <stdbool.h>
    #endif
    

    Wo ist das Problem? Unportabler und unpraktischer ist es da, die Platformabhängige windows.h einzubinden, weil man einen bool-Typ braucht.



  • SideWinder schrieb:

    Wieso nennen sie den dämlichen Datentyp auch "_Bool" und nicht "bool" - damit C weiter eine Untermenge von C++ bleibt. Dann könnte man sich C sparen und in C++ entweder funktional oder objektorientiert programmieren.

    Wegen solchen Leute die gerne
    #define bool int
    schreiben.

    Dadurch würde ein Native Typ bool diese Programme kaputt machen. Was natürlich nicht aktzeptable ist. Deshalb heisst der Typ _Bool und in stdbool.h gibt es ein typedef bool _Bool;

    Und die Gründe C zu verwenden sollten offensichtlich sein:
    Es ist verdammt einfach einen C Compiler zu schreiben - ein C++ Compiler ist nahezu unendlich kompliziert.

    Nein da hat man sich gedacht "How to rescue *my* language?". Also mal schnell Dinge einführen die es in C++ nicht gibt und schon braucht man wieder einen eigenen Compiler für C.

    Mit Ausnahme von VLA (was ja auch diskutiert wurde in C++ einzuführen) welche gravierende Änderung wurde denn eingeführt?
    Klar, kleiner kompatibilitätsprobleme sind vorhanden - aber es kostet kaum Aufwand ein C Programm C++ kompatibel zu machen...

    Das ist natürlich sehr toll - alleine schon weil man seit neuestem Grunddatentypen includieren muss 😕

    s. o. für Erklärung.
    bool war halt überfällig - und mittlerweile gibt es zuviel Code der ein eigenes bool definiert hat - deshalb hat das Native bool den Namen _Bool

    Auf was ich raus will: Auf der einen Seite martern sie alle anderen bool-Datentypen per #define an die früher gemacht wurden weil es in C kein bool gab. Man soll jetzt den Standard-Typ nehmen weil der eben Standard ist. Auf der anderen Seite haben sie bei der Einführung ihres Standard-Typs peinlich genau darauf geachtet das der mit nichts mehr kompatibel ist was bisher war.

    Kompatibel mit was denn?
    Kann ich kein bool b=a<c; oder ähnliches schreiben, oder was?

    BTW: In C sind ja offenbar nicht mehr alle Typen kleingeschrieben...

    Doch sind sie. Man soll _Bool ja nicht direkt verwenden, sondern bool verwenden.



  • Wenn man die WinAPI sowieso benötigt dann würde ich eher auf diese zurückgreifen. Das man den Typ in einen eigenen Header gepackt hat kann ich ja noch verstehen - aber das man ihn _Bool nennt nicht. Wer Probleme mit Namen hat includiert den Header nicht...

    Naja meiner Meinung nach wars einfach zu spät. Die Sprache ist tot.

    MfG SideWinder



  • Man kann auch einen rein funktionalen C++-Compiler schreiben. Wär ja alles kein Problem wenn C eine Untermenge sein würde. Naja 2 Sprachen sind viel toller. Man hat ja sonst keine zur Auswahl.

    MfG SideWinder



  • SideWinder schrieb:

    aber das man ihn _Bool nennt nicht. Wer Probleme mit Namen hat includiert den Header nicht...

    _Bool ist der echte Typ. dh, er ist auch ohne #include<stdbool.h> verfügbar.
    in stdbool.h ist lediglich das typedef.

    Naja meiner Meinung nach wars einfach zu spät. Die Sprache ist tot.

    Ne, nur vom Desktop Bereich verdrängt. Mikrokontroller wird man noch Jahrzehnte lang mit C programmieren.

    Man kann auch einen rein funktionalen C++-Compiler schreiben. Wär ja alles kein Problem wenn C eine Untermenge sein würde. Naja 2 Sprachen sind viel toller. Man hat ja sonst keine zur Auswahl.

    Wie einfach kann man das?
    klar, wenn man sich von EDG die Technik kauft, geht es schnell. Wenn man das Geld aber nicht ausgeben will oder kann - dann ist ein C Compiler wesentlich einfacher. Weil die Syntax wirklich simpel ist. Und Templates sind sowieso ein Horror für die Compilerhersteller.

    Und C und C++ waren schon immer 2 Sprachen. Alleine die herangehensweise an Probleme ist ja total unterschiedlich. Und auch früher war keine 100% kompatibilität da.



  • _Bool also ein Typ, den man ab jetzt benützen kann. Der ist dank geschütztem Namensraum für Variablen auch sicher noch nicht vorhanden. Damit man den faulen Programmierern aber weiterhin den Namen "bool" bieten kann lässt man ihn diesen Namen sozusagen auf Abruf includieren. Das tut man natürlich nur wenn das Projekt nicht dummerweise schon selbst 10 Mal bool definiert hat und der Standardheader somit Probleme machen würde. Da die meisten Projekte aber bool bereits definiert haben und eine Umstellung immer nur Probleme macht wird erst wieder kaum jemand den neuen Typ verwenden.

    BTW: C war niemals komplett Untermenge von C++? Das würde mich jetzt genauer interessieren. In welchen Punkten?

    Die herangehensweise ist imho auch nicht unterschiedlich - man kann C++ genauso gut als rein-prozedurale (man Gott wieso will ich immer funktional schreiben :() Sprache verwenden und dann ist die Herangehensweise an Probleme imho sehr ähnlich wie in C.

    Meiner Meinung nach ist C99 i-Tüpfel-Reiterei.

    MfG SideWinder



  • BTW: Weil du gerade davon sprichst wie teuer es ist Compiler zu schreiben: Neuer Standard heißt meistens neuer Compiler bzw. zumindest Teile neu schreiben. Den Header und den Typ hinzufügen sollte kein Problem sein. Aber, mir kam zu Ohren, ich muss zugeben hier wenig informiert zu sein, dass es einen neuen Zeiger-Abkömmling gibt. Compiler adieu.

    MfG SideWinder



  • SideWinder schrieb:

    BTW: C war niemals komplett Untermenge von C++? Das würde mich jetzt genauer interessieren. In welchen Punkten?

    http://david.tribble.com/text/cdiffs.htm

    Die herangehensweise ist imho auch nicht unterschiedlich - man kann C++ genauso gut als rein-prozedurale (man Gott wieso will ich immer funktional schreiben :() Sprache verwenden und dann ist die Herangehensweise an Probleme imho sehr ähnlich wie in C.

    Selbst rein prozedual bietet C++ immer so sachen wie die STL und Templates. Das ermöglich, selbst wenn ich selber keine Klassen schreiben will (warum auch immer??) andere Möglichkeiten.

    Natürlich _kann_ man C in C++ schreiben aber wie heisst es so schön "Fortran programmers can program FORTRAN in every langugae" 😉

    Dennoch sind es 2 unterschiedliche Sprachen.

    Meiner Meinung nach ist C99 i-Tüpfel-Reiterei.

    Inwiefern? Es gibt viele sinnvolle Neuerungen.



  • Du redest von Microkontrollern und wirfst C++ die STL vor? Seit wann funktioniert denn auf Microkontrollern die Standard-C-Library? Wenn ich die dort implementieren kann, kann ich die STL auch implementieren.

    BTW: Auf der von dir geposteten Page finde ich den Teil nicht: "Programming elements of C89 which are not supported by ISO-C++"

    MfG SideWinder



  • SideWinder schrieb:

    Du redest von Microkontrollern und wirfst C++ die STL vor? Seit wann funktioniert denn auf Microkontrollern die Standard-C-Library? Wenn ich die dort implementieren kann, kann ich die STL auch implementieren.

    ??
    Der Aufwand eines C++ Compilers ist einfach unendlich viel größer als für einen C Compiler. Willst du das nicht verstehen?

    Deshalb kann ich C auf jedem noch so kleinen Mikroprzessor zum laufen bekommen, weil man in kurzer zeit einen Compiler from Scratch schreiben kann - was bei C++ einfach nicht möglich ist.

    Die STL, Exceptions, Templates,... sind Beispiele warum ein C Programm immer anders aussieht als ein C++ Programm. Wenn man keine STL, Exception und Templates hat und keine OOP verwendet, ja dann hat man C (und nicht C++)

    BTW: Auf der von dir geposteten Page finde ich den Teil nicht: "Programming elements of C89 which are not supported by ISO-C++"

    War früher, mit C99 wurde es eben upgedatet. Lies es dir mal durch. Es steht immer noch alles dort.



  • Wenn man keine STL, Exception und Templates hat und keine OOP verwendet, ja dann hat man C (und nicht C++)

    Dann hat man C89. Und genau dabei hätte man bleiben sollen.

    War früher, mit C99 wurde es eben upgedatet. Lies es dir mal durch. Es steht immer noch alles dort.

    Spendiere mir ein Schild und zeig mir bitte die Textstellen 😞

    MfG SideWinder



  • SideWinder schrieb:

    Wenn man keine STL, Exception und Templates hat und keine OOP verwendet, ja dann hat man C (und nicht C++)

    Dann hat man C89. Und genau dabei hätte man bleiben sollen.

    Nein, C89 ist auch nicht 100% C++ kompatibel. In einigen Bereichen ist C99 da sogar kompatibler (zB bei Funktionsprototypen)

    War früher, mit C99 wurde es eben upgedatet. Lies es dir mal durch. Es steht immer noch alles dort.

    Spendiere mir ein Schild und zeig mir bitte die Textstellen 😞

    Es steht nicht explizit da - weil eben C99 der aktuelle Standard ist, aber im Text stehen Hinweise, wenn es in C89 anders ist als in C99, zB

    The following items are incompatibilities between C90 and C++98, but have since been changed in C99 so that they no longer cause problems between the two languages.

    Das steht bei " Changes to C99 versus C++98"
    Hier wird erklärt, was nicht mehr inkompatibel ist - der Rest, also alles was unter " C99 versus C++98" viele Sachen noch aus C89 übernommen sind. Man beachte: "The following items comprise the differences between C99 and C++98. Some of these incompatibilities existed between C89 and C++98 and remain unchanged between C99 and C++98, while others are new features that were introduced into C99 that are incompatible with C++98."


Anmelden zum Antworten