Const-Korrektheit in C

9

Anscheinend ist es eine gute Übung, const zu verwenden, es sei denn, etwas soll veränderbar sein, aber wie weit gehst du? Wenn ich ein Array von Strings habe, sollte meine Funktionssignatur dies beinhalten?

%Vor%

Ich werde es nicht was auch immer ändern, also ist es ein konstanter Zeiger auf das erste Element eines Arrays von konstanten Zeigern auf die ersten Elemente von Arrays aus konstanten Zeichen. Das ist ein Bissen, und der Code ist fast nicht lesbar. All dies ist eine einfache Datenstruktur wie argv .

Ich habe das Gefühl, dass const Standard sein sollte und es ein veränderbares Schlüsselwort geben sollte.

Sind Sie im Allgemeinen nur einer dieser const s? Was ist der Sinn davon, wenn Sie es immer noch leicht durch Dereferenzierung ändern können?

    
mk12 09.08.2012, 00:03
quelle

1 Antwort

5

Ich würde im Allgemeinen zwei der drei const s verwenden:

%Vor%

Manchmal würde ich alle drei verwenden, aber meiner Meinung nach ist die letzte die unwichtigste. Es hilft nur, den Code zu analysieren, der die Variable my_strings verwendet, während die anderen beiden Code analysieren, der einen Zeiger auf das Array hat, auf den my_strings zeigt, oder auf die Strings, auf die die Elemente dieses Arrays zeigen. Das ist in der Regel mehr Code, an mehreren verschiedenen Stellen (zum Beispiel der Aufrufer einer Funktion und die Funktion selbst) und daher eine schwierigere Aufgabe.

Der Code, der die Variable selbst verwendet, ist auf den Bereich von my_strings beschränkt. Wenn das also eine automatische Variable ist (einschließlich eines Funktionsparameters), dann ist sie gut enthalten und eine einfachere Aufgabe. Die Hilfe, die durch das Markieren von const zur Verfügung gestellt wird, kann immer noch geschätzt werden, ist aber weniger wichtig.

Ich würde auch sagen, dass, wenn char const * const * const my_strings "fast unlesbar" ist, sich das ändert, wenn Sie mehr Übung beim Lesen von C haben, und es ist besser, diese Praxis zu bekommen, als den Code zu ändern. Es gibt einen gewissen Wert beim Schreiben von C-Code, der von Neulingen leicht gelesen werden kann, aber nicht so viel Wert wie bei der Erledigung von etwas Arbeit; -)

Sie könnten typedefs verwenden, um die Variablendefinition zu verkürzen, auf Kosten der Einführung einer Indirektion, die viele C-Programmierer verärgern würde:

%Vor%

Aus welchen Gründen auch immer wollen C-Programmierer so viel wie möglich von einem Typ an einem Ort sehen. Nur wenn der Typ echt kompliziert wird (pointer-to-function-Typen), kann man einen typedef nur zum abkürzen verwenden, ohne zu erwarten, dass sich jemand darüber beschweren wird.

    
Steve Jessop 09.08.2012, 00:22
quelle