Unabhängig davon, wie "schlecht" der Code ist und ob die Ausrichtung usw. auf dem Compiler / der Plattform kein Problem darstellt, ist dieses Verhalten undefiniert oder fehlerhaft?
Wenn ich eine Struktur wie diese habe: -
struct data
{
int a, b, c;
};
struct data thing;
Ist es legal , den Zugang a
, b
und c
wie (&thing.a)[0]
, (&thing.a)[1]
und (&thing.a)[2]
?
In jedem Fall hat es auf jedem Compiler und jeder Plattform, auf der ich es ausprobiert habe, mit jeder Einstellung, auf der ich es ausprobiert habe, "funktioniert". Ich mache mir nur Sorgen, dass der Compiler möglicherweise nicht erkennt, dass b und thing [1] dasselbe sind, und dass Speicher für 'b' in ein Register gestellt werden und thing [1] beispielsweise den falschen Wert aus dem Speicher liest. In jedem Fall habe ich versucht, es hat das Richtige getan. (Mir ist natürlich klar, dass das nicht viel beweist)
Dies ist nicht mein Code; es ist Code , den ich an der Arbeit habe mit, ich bin daran interessiert , ob dies ist schlecht Code oder gebrochen Code als die anderen meine Prioritäten wirkt es sehr viel für die Änderung :)
Verschlagwortet mit C und C ++. Ich interessiere mich hauptsächlich für C ++, aber auch für C, wenn es anders ist, nur aus Interesse.