Visual C++ vs Unix Compiler

ninti

Well-Known Member
Hallo zusammen!

Ich hoffe, keiner wird gleich auf irgendwelche Hintergedanken meinerseits kommen.
Ich lese ja immer noch mein Buch :)
Und habe was gefunden, wo ich mich auch frage, ist das nun "besser" oder "schlechter"?

Wenn jemand denkt, dass ich hier eh nur spamen will, dann habe ich nichts dagegen, wenn man das löscht, vorher hätte ich aber die Frage noch beantwortet. :)

Es geht um die Zulässige Datentypen, Behandlung des Vorzeichenbits
Hat denn der gcc/clang auch das dabei?
Datentypen von char, short und, unsigned und signed long ?

Denn in meinem Buch steht, das hat der Visual C++ Compiler, nur frage ich mich, ob der gcc/clang das auch hat?

Nun, klar, ich kann mir das bestimmt irgendwo raussuchen, aber entschuldigt mich, wenn ich das Forum dazu missbrauche meine nervigen Fragen zu stellen.
Aber wozu ist das Forum sonst da? ;)

Gruß
 
Es geht um die Zulässige Datentypen, Behandlung des Vorzeichenbits
Hat denn der gcc/clang auch das dabei?
Datentypen von char, short und, unsigned und signed long ?
Was genau möchtest du denn wissen, ob der GCC auch char Datentypen hat? :eek:
Und warum probierst du es nicht einfach mal aus?
 
Ich versteh die Frage ehrlich gesagt auch nicht... Aber wenn du C++ auf Unix-Systemen programmieren willst und es so haarklein lesen willst... Warum zum Himmel holst du dir ein Visual C++-Buch?
 
Was genau möchtest du denn wissen, ob der GCC auch char Datentypen hat?
Korrekt! :)

Und warum probierst du es nicht einfach mal aus?
Weil ich es noch nicht weiß wie??
Hast du einen C-Code dafür, dann kann ichs ja probieren.

Ich hab noch was VERGESSEN!
Es geht um Bitfelder!

Ja, ich wusste nicht genau, wie ich diese Frage auch formulieren sollte. :(

Warum zum Himmel holst du dir ein Visual C++-Buch?
Weil ich es nicht vorher wusste und es sonst keinen Unterschied macht.
Und weil es ja so toll sein sollte.
Und das Buch heißt auch nicht "Wie lerne ich Visual C++?"
Das ist ganz normales C Buch, wo der Typ halt den Visual C++ IDE/Compiler benutzt.
Aber sonst ist da auch nicht viel davon die Rede.
Und ja, ich möchte schon bei Unix bleiben.
 
Wenn du doch schon selbst schreibst, dass es kein Unterschied macht.....

Ausprobieren: Wie wäre es einfach deinen Code dem Compiler vor die Füße zu werfen?
 
Ausprobieren: Wie wäre es einfach deinen Code dem Compiler vor die Füße zu werfen?
Tut mir Leid, für mich ^^, dass du denkst, ich würde so etwas nicht schon machen wollen.

Ich habe leider keinen Code, der mir das zeigen könnte, eher irgendein komisches Beispiel, wo das nicht gerade zu ersehen ist.

Edit:
Oder meinst du, die alleinige Unmöglichkeit es zu compiliert würde es mir zeigen?
 
Fortsetzung :(
Ich habe einfach das kompiliert und es ging ohne Rückmeldung:

Code:
struct  test
{
     unsigned char testlauf : 1;
};

So wie ich erwartet habe, ich denke, ich müsste nun irgendwie darauf zugreifen.
Nur leider ist das einzige Beispiel zu kompliziert, um noch wirklich durchblicken zu können, wo eh nur wenig über Bitfelder geschrieben wurde.
 
Also... Wenn der Compiler keinen Fehler wirft dann scheint das ja zu klappen.....

Und wenn du nach Bitfeld in der Suchmaschine deiner Wahl suchst, dann ist das ggf. sogar schon der erste Treffer der dir dazu etwas sagt:
http://lmgtfy.com/?q=bitfeld

Ehrlich gesagt glaub ich jedoch nicht, dass du zu Beginn groß Gebrauch von Bitfeldern machen wirst wenn du nicht wirklich spezielle Fragestellungen hast.
 
Es geht jetzt nicht darum, dass ich nun mit Bitfeldern was machen kann sondern darum, ob die Möglichkeiten von Visual C++ auch bei gcc/clang gibt.
Ob Datentypen für ein Bitfeld von unsigned und signed: char, short und long auch in gcc/clang gibt und nicht nur in Visual C++.

Okay! Ich hab was gefunden und es funktioniert also auch mit den Datentypen von/für Visual C++!

Ich habe mir das echt schwieriger vorgestellt, also dass ihr irgendwie mit clang/gcc Sachen kommen müsst, welche ich ja nicht verstehe, deshalb auch die Fragestellung.

Tut mir echt Leid, ich muss anfangen, nicht gleich immer das Forum aufzusuchen.
Irgendwie hat sich diese Eigenschaft bei mir "eingebrannt" :(
Sonst bin ich eigentlich selbstständig, vielleicht liegt das eher an C und das ganze große Universum meiner Unwissenheit da drüber. :)

Besten Dank!
 
Um es noch etwas weiter auszuführen: Bitfelder sind eines der Features von C und C++, die in ihrer direkten Form in der Praxis sehr selten verwendet werden. Das Buch erwähnt sie wahrscheinlich nur der Vollständigkeit halber recht kurz am Rand. Klar, man kann damit coole Sachen machen, aber in der Praxis nutzt man sie dennoch kaum. Speicher kann man auf allen "großen" Architekturen durch sie nicht sparen und wenn man einzelne Bits manipulieren will oder muss, nimmt man 98% der Fälle klassische Binär-Magie.

Und Visual C++ aka MSVC... Gerade als Anfänger würde ich von dem Machwerk die Finger lassen. Das Ding ist nicht unbedingt schlecht, gerade die IDE nicht. Aber der Compiler ist doch weit von der Qualität der GCC und Clang entfernt. Sowohl was seine Diagnosen betrifft, als auch Standardkonfomität. C99 ist nach wie vor nicht so dolle, die Bibliothek ist völlig versaut und C++ in aktuellen(!) Standards dann ein bodenloses Loch. Lass dich davon nicht versauen, mache erstmal die reine Lehre. Das Void holt dich noch früh genug. :)
 
Dass Bitfelder für heute nicht so dolle sind wurde auch geschrieben.
Ich nehm auch erst mal alles wie es geht auf und später kann man immer noch schauen. :)
Bitfelder sind ja auch was für die "vor 30 Jahren war alles besser" ;)
Da gabs keine Gigabytes. Jetzt mit der super schnellen Technik, irgendwie nur dazu da Windows und Spiele laufen zu lassen, kriegt so ein Programm Angstzustände, wenn er mal 8 GB "sieht". :D
Mir gings eher nur darum, um nur zu wissen, ob diese Datentypen auch mit gcc/clang gehen.
Jetzt anwenden wollte ich es nicht.

Ich hatte vor zig Jahren mal so etwas und war ja nicht schlecht, wenigstens das Menü konnte ich ohne große Programmierkenntnisse erstellen, was schon feine Sache war.

C99 ist nach wie vor nicht so dolle, die Bibliothek ist völlig versaut und C++ in aktuellen(!) Standards dann ein bodenloses Loch.
Wie bitte, sollte ich nun C99 nicht nutzen?

Vielleicht zur Info? Ich habe immer noch Linux und benutze immer noch clang, wenn jetzt jemand denken würde, ich würde auf einmal VC++ verwenden.

Danke Yamagi!
 
Hat denn der gcc/clang auch das dabei?
Datentypen von char, short und, unsigned und signed long ?

Vorsicht Falle!

Richtig, Visual C++ hat char, short, unsigned und signed long. Aber was gerne übersehen wird: Nur in der Enterprise Version.

Sowohl gcc als auch clang kommen zwar ohne Datentypen, aber es gibt open source scripts, die bei Algol68 seinerzeit kostenlos mitgelieferte Datentypen ins C++ Format konvertieren, so dass man dann auch mit gcc und clang C++ source code mit den gängigeren Datentypen kompilieren kann. Das reicht für Lernen oder Hobby allemal. Profis, die sich ihre Datentypen nicht mit dem PHP data types kit 2.0 für die jeweilige Architektur selbst bauen, kaufen auch gerne mal das (für die hohe Qualität) durchaus nicht übertrieben teure Datentypen-Set von IBM (auf ebay gelegentlich für unter 100€ zu finden). Das reicht mit 80 bits (64 + 16 extension bits, Vorzeichen, diverse x86 flags, etc.) auch für größere Projekte.
 
@rmoe:
Das versteh ich nun nicht ganz. Okay, für VC++ gilt das ja mit der Enterprise Version.
Aber clang akzeptiert doch auch die Datentypen "von VC++"

Meine neue Frage wäre dazu, kann man dann clang/gcc professionell nicht nutzen? Also damit Geld verdienen? Sind da dann nicht alle Vorzeichen, flags usw. vorhanden?
Ist denn alles was bei Linux/*BSD kostenlos ist, nur für den privaten Gebrauch?
Und für professionellen Gebrauch unbrauchbar?
Ich frage nur aus Interesse.
Wieso funktioniert dann z.B. FreeBSD? Wurde es mit den teuren Datentypen programmiert???
 
Kurzversion: Hässliche Geschichte. Die BSDs haben seinerzeit die Datentypen von AT&T übernommen (die damit vermutlich Berkely eins reindrücken wollten aber egal, Hauptsache, wir haben die Datentypen). Nur, das ist der hässliche Pferdefuß, ist die Lizenz damals so gelaufen, dass BSD zwar die Datentypen nutzen aber nicht für nicht quelloffene Programme verwenden darf (was für FreeBSD wiederum egal ist, weil FreeBSD ja open source ist).

Und, ja klar stehen die Datentypen bei linux,gnome,gcc, etc. unter gpl und dürfen also nicht für kommerzielle Zwecke genutzt werden. Die einzige kostenlose und rechtlich saubere Basis sind die Datentypen damals von Algol68. Aber die müssen halt jeweils erst (meist bei der Compiler Installation) konvertiert werden für C++. Oder eben, wie gesagt, gleich kommerzielle Datentypen (was halt für einige eine "religiöse" Frage ist wo die dann aus Prinzip Nein sagen). Was du natürlich machen kannst ist, dir irgendwo das K&R Buch ausleihen und die C Datentypen abschreiben selbst händisch anlegen (ist technisch kein Problem. Einfach im C++ Code als "cdecl" (C style Declation) anlegen).

Was meinst du wohl, warum Sprachen ohne Datentypen so beliebt und verbreitet sind?! Sein Zeug grundsätzlich erst mal in javascript zu bauen und mit einem reverse compiler plugin im Browser mühsam umzustricken, damit der C++ Compiler es frisst, mag ja für Hobbyisten OK sein, aber für Profis ist das zu ineffizient. Ergo entweder kommerzielle Datentypen kaufen oder gleich eine Sprache ohne Datentypen nehmen.
 
Ninti, briinge dich doch nicht selbst durcheinander. Natürlich werden GCC und Clang auch und gerade professionell verwendet. Und weder Bitfelder noch einer der anderen Datentypen sind ein Problem. Alle Compiler unterscheiden sich nun einmal ein wenig, der eine mehr, der andere weniger. VC++ backt halt gerne seine eigenen Brötchen, hat zwar eine nette IDE ist aber hinsichtlich der Implementierung der Standards etwas hinterher oder auch recht eigenwillig. Außerdem werden einige Dinge unterstützt die auf anderen Platformen keine Bedeutung haben.

Das alles ist bei C/C++ nun einmal so und es gibt eine Menge an Möglichkeiten wie man damit umgehen kann. Aber damit brauchst du dich jetzt noch nicht zu befassen.

PS: Oder werden wir hier von dir tatsächlich verarscht... :rolleyes:
 
Was meinst du wohl, warum Sprachen ohne Datentypen so beliebt und verbreitet sind?
Da sag ich auch nur WTF! :)

Also als selbständiger Coder muss man dann erst mal blechen, um programmieren zu können ^^
Na gut, ist irgendwie gerecht, da sie ja Geld verdienen wollen.

Nächste Frage:
Sind die Datentypen von AT&T in clang drin? :D
Oder sind die nur für die FreeBSD Devs?

Natürlich werden GCC und Clang auch und gerade professionell verwendet. Und weder Bitfelder noch einer der anderen Datentypen sind ein Problem
Das ist auf jeden Fall beruhigend, aber wenn man GCC/Clang professionell verwendet, zahlen dann die Leute dafür oder meinst du eher nur ihr Können?

Das alles ist bei C/C++ nun einmal so und es gibt eine Menge an Möglichkeiten wie man damit umgehen kann. Aber damit brauchst du dich jetzt noch nicht zu befassen.
Will ich auch nicht, aber ein gesundes Interesse ist schon dabei. :)
 
Für alle die sich nun evtl. wirklich wundern:
@rmoe hat wohl (wie ich auch) den enormen Trollfaktor erkannt und wollte wohl noch etwas zusätzliche Würze in die Suppe geben. Ich muss zugeben sehr nett und überzeugend geschrieben (und ich konnte mir ein Lächeln auch nicht verkneifen).

Ich denke alle ernsthaften Fragen sind damit geklärt.
 
Zum Thema Bitfelder: Die könnten cool sein aber mangels Standardisierung sind sie gemeingefährlich.

Verwende niemals ein Bitfeld um Daten mit anderen Programmen, prozessen auszutauschen, um mit Hardware zu kommunizieren, zum Abspeichern …

Was Sie machen ist nämlich nicht standardisiert. Jeder Compiler darf die Bits umsortieren left-padden, right-padden, mittendrin-padden …

Ein einziger Alptraum.
 
Um die letzte noch offene Frage zu klären:
ninti said:
Wie bitte, sollte ich nun C99 nicht nutzen?
Doch, du sollst C99 nutzen. Schon allein da C89, zumindest wenn absolut konform implementiert, einige eklige Limitierungen und C99 einige sinnvolle Erweiterungen hat. Nur Microsoft hatte irgendwann in den späten 1990ern mal die Idee, dass C ja tot sei und alle C++ nutzen sollen. Daher unterstützte MSVC lange im C-Modus nur die reine C89-Lehre und im C++-Modus nur sehr wenig C99. Dazu kommt, dass Microsoft bei der Bibliothek teilweise eigene Wege gegangen ist. Inzwischen gab es da einen Paradigmenwechsel, vor dem Hintergrund von C++11 bewegt man sich ein wenig in Richtung C99. Perfekt ist es aber noch lange nicht. Daher: Nehme für den Anfang erstmal keine Rücksicht auf MSVC. Das Loch holt dich noch früh genug ein.
 
Einerseits finde ich selber "trollen" ganz witzig und okay in Foren, anderseits ist das ziemlich schädlich und ätzend für das Troll-Opfer.
Deshalb sollte man, wenn man schon kein Arsch sein will, eine Warnung hinschreiben, da man irgendwie "glaubt" was der andere schreibt.
Und bei solchen Themen ist das schon sehr schädigend, nicht nur für das Opfer, sondern auch für den Troll, da derjenige auch in "Ansehen" verliert.
 
Back
Top