Krautkanal.com

Veröffentlicht am 2015-09-21 20:01:41 in /prog/

/prog/ 7800: C Unions

trueblood_33 Avatar
trueblood_33:#7800

Harro /prog/-Bernd.

warum hat mir niemand früher erzählt dass es in C so dinge wie unions gibt.

Das spart so viel code wenn man aus Bytes große Integer machen möchte oder andersrum.

TL;DR C-Neubernd freut sich über C.

jonkspr Avatar
jonkspr:#7802

> warum hat mir niemand früher erzählt

Du hast ja nicht gefragt.
Geht übrigens auch mit Pointer + cast.
Aber pass auf mit der Byteorder (falls relevant)!

pjnes Avatar
pjnes:#7803

Toller Faden, du hast also nie in ein Buch geguckt, naja.

alexcican Avatar
alexcican:#7807

Typkonvertierung per Union und auch per Cast ist nur sehr sehr eingeschränkt erlaubt. ("Type punning rules", "Strict aliasing rules")
Lass es also.

millinet Avatar
millinet:#7811

Das ist eben C. Ronja die Räubertochter stellt sich breitbeinig hin und du denkst du darfst alles mit ihr machen.

Danach stellt sich raus, daß sie eine Zicke ist und im Kleingedruckten steht, daß Betatschen und ähnliche Dinge undefiniertes Betragen nach sich ziehen.

Natürlich findest du das heraus, nachdem du im Krankenhaus aufgewacht bist und im Gips liegst. Denn Ronja war nicht mal so nett, dir sofort eins in die Fresse zu geben, sie hat erstmal mitgemacht und nach Lust und Laune entschieden, daß sie nicht meer will.

naupintos Avatar
naupintos:#7813

>>7802
Byte Order würde kontrolliert, alles klar soweit
>>7803
Bücher ist für schwache, ausserdem lernt besser wenn er selbst Hirnschmalz reinsteckt. Da helfen keine Bücher.
>>7811
Bernd mag die Geschichte, und wartet noch exakt auf diesen Moment. Momentan hat ihn nur der USI vom avr massiv in den arsch gefickt aber sonst ist alles gut :3

ryanjohnson_me Avatar
ryanjohnson_me:#7814

>>7803
Welchen Sinn hat dieses Brett denn, wenn man nichts ansprechen darf, was nicht woanders auch verfügbar ist oder was ein anderer Bernd schon laaaaaaange lange wusste? Es ist ja schön, dass hier das Niveau ein bisschen höher gehalten wird und niemand wirklich willkommen ist, der sich Standardfehlermeldungen erklären lassen will oder Dinge, die schon zehn mal detailliert und verständlich auf SO erklärt sind oder was er am tollen neuen WP-Plugin ändern muss, damit die Schrift bunt wird und ob das auch mit ÄIDSCHÄX geht.
So, genug prokrastiniert.

davidbaldie Avatar
davidbaldie:#7815

>Das spart so viel code
Protipp: Mit #define struct union kannst du auch Speicher sparen.

justinrhee Avatar
justinrhee:#7817

Okee Bernd ist ja nicht so.
Hier das Faktoid:

Der C-Standard erlaubt allen möglichen Scheiss. Er garantiert gerade noch, daß ein int aus sizeof(int) konsekutiven BYTEs besteht.
ob nun aber NUXI, XUNI oder UNIX, das meine Herren, ja TILT.
Und auch VXYN ist zugelassen - jeder Schwachsinn, Zweierkomplement ist nicht vorgeschrieben, im Prinzip darfst du auch auf Affen mit Abakus C übersetzen.
Erwähnte Bernd, daß ein BYTE 32 Bit haben darf?

Verdammte Müslifresser.

csteib Avatar
csteib:#7818

>>7817
>Erwähnte Bernd, daß ein BYTE 32 Bit haben darf?
Wenn die kleinste adressierbare Einheit der Architektur nunmal 32 Bit hat, ist das doch völlig normal. Ein Byte muss nicht immer auch ein Oktett (8 Bit) sein.

arnel_lenteria Avatar
arnel_lenteria:#7819

Nö. Wir müssen keine HAL9000 Krebsmaschinen unterstützen. Davon kommt doch der ganze Krebs. Alle Welt ist eine VAX, und der Rest hat halt Pech gehabt und sollte ohnehin eine "höhere" Sprache nutzen.
Natürlich haben sie es auch mit dem Scheis-DSP verbockt. Irgendein Mist mit den INT_MAX - ach ja genau, weil char ja nun genauso breit wie int ist, funktioniert EOF eher nicht so prächtig. ZONK! Vielen Dank auch.

Dasselbe mit der Standardbibliothek. Die ist weitgehend sinnfrei auf Embedded, weil da ohnehin ganz spezielle Verhältnisse herrschen. Aber alle liefern sie irgendwelchen libc-Krebs mit, der natürlich - ups - nicht so "ganz" funktioniert wie auf nem PC-Hobel. ach nee.

souperphly Avatar
souperphly:#7823

was ist der Unterschicht zu struct?

t.Javabernd

nehemiasec Avatar
nehemiasec:#7824

Wie jetz?
C is ja nich so portabel wie immer alle sagen?
Ueberraschung :3

bassamology Avatar
bassamology:#7825

>>7824
Ist es doch. Gründe wurden bereits genannt. Oder du hast was falsch verstanden oder dich falsch ausgedrückt, Fefe-Style.

mefahad Avatar
mefahad:#7828

bitte seit Discotiere. Ein guter Faden. Werde auch nicht krebsen. Will JAVA lernen und hoffe auf >>7819 so sehr. Bitte Bernd,ich lauer seit 3 Jahren und melde mich kaum zu Wort. Aber >>7819 ist so qualitativ.Ich verstehe davon kaum ein Wort, aber ich lese es so gern, weil ich lauer meer als mir lieb ist. Bitte Berndi, was hat C, was JAVA nicht hat?

vladarbatov Avatar
vladarbatov:#7829

>>7828
>was hat C, was JAVA nicht hat?
Geschwindigkeit, direkter Speicherzugriff

suprb Avatar
suprb:#7832

>>7829
was im Jahr 2015 ja so viel wichtiger, als billige Entwicklung ist.

thierrymeier_ Avatar
thierrymeier_:#7834

>>7832
was ist den an C nicht billige Etwicklung? Tausende Libraries, Tausende Menschen, die die Sprache beherrschen.

soyeljuaco Avatar
soyeljuaco:#7835

>>7834
>Ich habe noch nie etwas anderes als C entwickelt.

starburst1977 Avatar
starburst1977:#7836

>>7832
>>7834
>>7835
Warum nicht einfach das jeweils geeignetste Werkzeug nehmen? Betriebssysteme, Treiber und anderer Niedrigstebene-Zeugs wird nunmal in C geschrieben. Ganz oben zum Benutzer hin will man dagegen eine brauchbar hohe Abstraktionsebene und nutzt daher eine der "langsamen" Sprachen.

falvarad Avatar
falvarad:#7839

>>7836
Zumal die "langsamen" Sprachen zT garnicht so langsam sind.
Man kann halt in C viele Fehler machen, aber hat auch alle Freiheiten. So ein Fach ist das.

mactopus Avatar
mactopus:#7851

Die variant records aus Ada sind hart überlegen.

bluesix Avatar
bluesix:#7866

>>7851
Die Enums aus Rust sind zweimal hart überlegen. :3

Neuste Fäden in diesem Brett: