Zugriff auf Array-Objekte generisch über Zeiger auf Array von Zeichen?

9

Wenn ich einen generischen Algorithmus schreibe, darf ich ein Array unbekannten Typs als Zeiger auf ein Array verwenden, bei dem jedes Element die angegebene Größe hat, ohne undefiniertes Verhalten aufzurufen?

Gibt es zum Beispiel im folgenden Code UB?

%Vor%

Ich weiß, dass ich das tun kann:

%Vor%

Aber das erste Bit Code erscheint mir idiomatischer, da der Compiler die Zeigerarithmetik für mich ausführt. Die obige Funktion kompiliert ohne Warnungen mit gcc und clang (relevante Kompilierungsflags sind -std=c99 -O3 -fstrict-aliasing -pedantic-errors -Wextra -Wall ). Ich frage mich auch nach strengem Aliasing, aber soweit ich das beurteilen kann, scheint es, als würde ich es hier nicht brechen, da Objekte indirekt über char* verwendet werden dürfen.

    
Chrono Kitsune 24.06.2017, 17:32
quelle

1 Antwort

1

In C führt ein typedef keinen neuen Typ ein. Es nennt nur ein Konstrukt. Der Name und seine Definition sind austauschbar. (Dasselbe gilt nicht für, sagen wir, struct , wo es keine Möglichkeit gibt, die Definition der Struktur anders als durch ihren Namen auszudrücken.)

Solange Sie also nur von einer Form von char * sprechen - was, wie Sie wissen, besonders ist, weil jeder Datenzeiger in diese konvertiert werden kann -, dann verlassen Sie sich auf ein definiertes Verhalten.

    
James K. Lowden 28.07.2017, 04:58
quelle