statisch vor der Zahl in einem c-Programm [duplizieren]

8

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.

  1. Funktionsdefinitionen für eine Datei privat halten.
  2. Einen variablen Wert zwischen den Aufrufen einer Funktion beibehalten.

Keine von beiden macht hier Sinn. Kann jemand erklären, warum Sie vor einer Nummer immer statisch schreiben würden und was das ist?

    
Siniyas 31.07.2015, 14:30
quelle

2 Antworten

9

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:

%Vor%

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) .

    
Grzegorz Szpetkowski 31.07.2015, 14:35
quelle
1

Diese Anweisung buf[static 1024] teilt dem Compiler mit, dass buf mindestens 1024 Zeichen lang ist. Es wird zur Optimierung verwendet, mit anderen Worten: buf kann niemals null sein.

    
Nishant 31.07.2015 14:36
quelle

Tags und Links