Char vergleich Problem



  • Vielleicht sollte man noch darauf hinweisen, dass es in C keine Ausnahme (exception gibt, die man werfen könnte, und da ein Java to C++ Tutorial gesucht wird (sorry, ich kenne keines ohne zu suchen), sind wird wohl schon wieder im falschen Forum.

    MfG,

    Probe-Nutzer



  • Bis jetzt is alles noch AnsiC, außer das Tutorial...



  • Heimelchen schrieb:

    Bis jetzt is alles noch AnsiC, außer das Tutorial...

    Nein, darf ich dezent auf diese Zeile hinweisen (throw-Schlüsselwort!):

    throw EMPTY_EXCEPTION;
    

    MfG,

    Probe-Nutzer



  • Ich denke auch das wir im C++ teil sein müssten, da ich zumindest in C++ zu programmieren versuche, aber man kann es dem Bot nicht verübeln das er das ganze gleich verschoben hat, wenn wir noch genauer sein wollen ist es C++ auf AIX Systemen darum habe ich am Anfang auch Unix gewählt. Ich hatte jedoch auch das Gefühl das die Exceptions unterschiedlich sind.

    In Java zb. kann ich eine Methode auf die "Schnauze" fliegen lassen und dan wirft diese eine exception, es scheint mir so als würde das in C++ nicht ganz so Funktionieren aber ich werde mir wohl nochmals im Google was suchen, bis jetzt habe ich nur die "präventiven" throws gesehen in Tutorials.

    Gruss & Danke,

    Alcatros



  • Die Tatsache, dass du in C++ programmierst, bedeutet ja noch nicht, dass du C++ programmierst. C++ unterstützt ja auch die Ansi C Syntax und die bleibt natürlich Ansi C, auch wenn sie in einer C++-Datei steht. C++ wird es erst dann, wenn sowas wie Klassen oder Exceptions ins Spiel kommen, weil die expliziet erst in C++ definiert werden.
    So ähnlich ist das auch mit Unix oder Linux. Nur weil du unter Unix programmierst und für Unix entwickelst, wird aus C/C++ keine Unix-Sprache. Es bleibt C/C++, erst wenn du betriebssystem-spezifische Funktionen verwendest (API), verlässt du C/C++ (natürlich nur hier im Forum, die API ist auch in C/C++).

    Zu deinem Problem: du verwendest zwar eine Klasse, aber das eigentlich Problem besteht mit einem char-Array. Und das ist sowas von C.....



  • Heimelchen schrieb:

    Die Tatsache, dass du in C++ programmierst, bedeutet ja noch nicht, dass du C++ programmierst. C++ unterstützt ja auch die Ansi C Syntax und die bleibt natürlich Ansi C, auch wenn sie in einer C++-Datei steht.

    verbreite solche Lügen nicht. Ein großer Teil von ANSI C wird in C++ unterstützt, aber nicht alles. Siehe http://david.tribble.com/text/cdiffs.htm

    #include <stdio.h> 
    
    int main(void) 
    { 
        printf("C%s\n", sizeof(char) == sizeof('a') ? "++" : ""); 
        return 0; 
    }
    

    dieser Code ist C, kompilierst du ihn aber mit einem C++ Compiler, dann bekommst du eine andere Ausgabe als mit einem C Compiler.

    Außerdem ist C++ eine Multiparadigma Sprache und nur weil du keine Klassen und Exceptions nutzt, heißt nicht, dass du deswegen C++ nicht verwendest.



  • supertux schrieb:

    printf("C%s\n", sizeof(char) == sizeof('a') ? "++" : "");
    

    Beleuchtet dieses Beispiel vielleicht eher eine Eigenart eines Compilers als die Unterschiede zwischen C und C++? Ein char ist ein char und 1 Byte groß! Ob der Compiler 'a' als char oder w_char oder AnsiString interpretiert, ist Sache des Compilers und nicht der Programmiersprache.
    sizeof(int) liefert nicht mal bei allen C-Compilern das gleiche Ergebnis!

    Abgesehen davon wollte ich keinen Aufsatz über die Unterschiede zwischen C und C++ verfassen, sondern einem "Anfänger" einen kleinen Wink geben.



  • Danke für alle Antworten.

    Das Problem das wir hier auch haben ist das ein Byte nicht immer 8 bit gross ist ect ect ect... aber ich würde schon gerne auf den C++ standard bauen, C finde ich auch gut, wer jedoch OO gelernt hat und von der Java Seite kommt braucht Polymorphismus ect...



  • Heimelchen schrieb:

    supertux schrieb:

    printf("C%s\n", sizeof(char) == sizeof('a') ? "++" : "");
    

    Beleuchtet dieses Beispiel vielleicht eher eine Eigenart eines Compilers als die Unterschiede zwischen C und C++?

    Beides, aber in erster Linie den Sprachunterschied. 'a' ist in C int, in C++ char. sizeof(char)==sizeof('a') gilt also, wenn es C++ ist oder wenn sizeof(int)==1 ist, wobei letzteres eher selten der Fall sein dürfte.



  • Bashar schrieb:

    'a' ist in C int, in C++ char.

    Das will ich doch schwer bezweifeln.



  • Du willst, aber du bringst es nicht übers Herz? Oder wie soll ich das verstehen? Nachlesen darfst du das aber gerne selbst 🙂



  • In meinen Büchern steht davon nix. Würd mich auch wundern, programmiere ich in meinen Controller ein int, belegt das zwei Byte, ein char dagegen nur eins. Zwar kann man zwei in eins stecken, aber gleich sind sie deswegen noch lange nicht.
    Guck doch mal bei deinem Compiler nach dem Charset und stell ihn auf ASCII, dann wird aus deinem "int" ganz schnell ein char.



  • Heimelchen schrieb:

    In meinen Büchern steht davon nix.

    Aha. Das soll mir was sagen? Deine Bücher und dein Compiler tun hier überhaupt nichts zur Sache (wobei ich bezweifle, dass du tatsächlich irgendwo gefunden hast, dass eine Zeichenkonstante den Typ char haben muss; und erst recht hast du nicht ausprobiert, ob sizeof('a') vielleicht ungleich 1 sein könnte). Solche Fragen kann man sich beantworten, indem man die Sprachdefinition von C im ANSI-C-Standard nachliest.



  • Genau. Und bei mir ist sizeof('a')==1. Ich programmiere aber auch nicht nur unter VisualStudio und nicht nur für PC. Und wenn ich in meinen ICE gucke, steht im EEPROM an der Stelle von 'a' ein Byte. Wahnsinn!



  • Macht sich da kognitive Dissonanz breit? Du hast mein Argument überhaupt nicht zur Kenntnis genommen.

    Bleib halt dumm, mir doch egal 🙂



  • *gähn*


  • Mod

    Um mal der Dummheit entgegen zu wirken, hier der ANSI C Standard. Er ist sehr klar formuliert:

    ISO 9899 TC2 6.4.4.4:2 schrieb:

    An integer character constant is a sequence of one or more multibyte characters enclosed in single-quotes, as in 'x'. A wide character constant is the same, except prefixed by the letter L. With a few exceptions detailed later, the elements of the sequence are any members of the source character set; they are mapped in an implementation-defined manner to members of the execution character set.

    ...

    ISO 9899 TC2 6.4.4.4:10 schrieb:

    An integer character constant has type int. The value of an integer character constant containing a single character that maps to a single-byte execution character is the numerical value of the representation of the mapped character interpreted as an integer. The value of an integer character constant containing more than one character (e.g., 'ab'), or containing a character or escape sequence that does not map to a single-byte execution character, is implementation-defined. If an integer character constant contains a single character or escape sequence, its value is the one that results when an object with type char whose value is that of the single character or escape sequence is converted to type int.

    Hervorhebung durch mich.



  • Hallo Zusammen,

    Also vom Proggen in C++ habe ich nur mässig Ahnung aber wen Ihr euch hier schon die Klatsche gebt , dann bitte ich um Richtigstellung

    Es ist ganz klar das man in 1 Byte (8bit) 255 werte darstellen kann, dem entsprechend muss das Charset ASCII sein dann passt das in 1 Byte.

    Wenn das Charset Unicode(UTF-8) ist dann braucht man 4 Byte also 1 Int,

    Das andere Geplänkel das Ihr hier habt ist schwer zu beurteilen.

    Gem. Wikipedia

    Ein Integer besteht in der Regel aus 8, 16, 32, 64 oder 128 Bits (also 1, 2, 4, 8 oder 16 Bytes) – entsprechend der Wortbreite der jeweiligen CPU

    Also kann man sagen das 1 Byte auch 1 Integer sein kann unter diesen Umständen. Im Technischen Bereich würde ich aber eine Einheit von 1 Byte nie Integer nennen, für mich ist dass das gleiche wie 1 Char nur ist die Repräsentation von einem 1 Byte Char in ASCII und einem 4 Byte Int in Unicode




Anmelden zum Antworten