Ich las also einen Blog über das Optimieren der Sortierung von Blöcken eines int und die Implementierung war in c. Ich kam über diese Linie, die ich nicht verstehe:
%Vor%Der Puffer ist grundsätzlich zu sortierende Daten und jedes int in ihm bekommt seine Blöcke von 4 Bit sortiert, also ist es im Grunde für das Benchmarking. Als ich die Verwendung von statischen in c nachgeschlagen habe, fand ich zwei Dinge.
Keine von beiden macht hier Sinn. Kann jemand erklären, warum Sie vor einer Nummer immer statisch schreiben würden und was das ist?
Das ist die dritte Bedeutung des Schlüsselworts static
, das in C99 eingeführt wurde, aber es ist kein bekanntes Feature. Sein Zweck ist, dem Compiler mitzuteilen, dass Sie ein Array mit mindestens 1024 Elementen übergeben.
Von C99 (N1256) §6.7.5.3 / p7 Funktionsdeklaratoren (einschließlich Prototypen) (Hervorhebung von mir):
Wenn das Schlüsselwort
static
auch in[
und]
des Arrays erscheint Typ Ableitung, dann für jeden Aufruf der Funktion der Wert der Entsprechendes tatsächliches Argument soll den Zugang zum ersten ermöglichen Element eines Arrays mit mindestens so vielen Elementen wie von Größenausdruck .
Es gibt Diskrepanzen zwischen den tatsächlichen Implementierungen. Zum Beispiel gibt clang
eine Warnung aus, wenn das übergebene Array die obige Subklausel nicht erfüllt. Zum Beispiel:
gibt:
Warnung: Array-Argument ist zu klein; enthält 8 Elemente, aufgerufene benötigt mindestens 10 [-warray-bounds]
, während die gcc
Implementierung nichts tut (siehe GCC Fehler 50584 für weitere Informationen) .