Ich wunderte mich über kleine Unterschiede zwischen der Deklaration von Funktionsprototypen in Kopfzeilen und in .c-Dateien. Ich habe einen Header mit einigen Prototyp-Funktionen und einigen C-Dateien mit echter Implementierung dieser Funktionen. Ich habe einige Änderungen in der Kopfzeile vorgenommen, nur hinzugefügt "__restrict" Qualifier (von gcc erkannt). Meine Frage ist, muss ich das "__restrict" Qualifikationsmerkmal in .c-Dateien zu setzen (zur Zeit der Code kompilieren, so denke ich, die Antwort ist nein, aber eine gewisse Präzision würde geschätzt werden).C: Unterschiede zwischen Prototyp-Deklaration in der Kopf- und Funktionsdeklaration für die Implementierung?
Funktioniert dies für jeden C-Qualifier? Kann ich etwas "const" oder "volatile" im Header hinzufügen, ohne das Gleiche in .c-Dateien zu tun?
derzeit in Header:
int myfunc_gettype (const mytype *__restrict, int *__restrict);
und in Implementierungsdatei:
int myfunc_gettype(const mytype *attr, int *type)
in der Tat das beschränken Schlüsselwort C99 ist und das __restrict ist nur durch gcc fangen mit i das gleiche Ergebnis zu erraten. – claf
Ich bin mir nicht sicher zu verstehen, wenn ich das restrict Qualifier in der Kopfzeile und nicht in der Implementierung habe, wird der Zeiger sowieso "beschränken" oder nicht? – claf
Sie rufen UB auf. Es kann tatsächlich dazu führen, dass der Zeiger eingeschränkt eingeschränkt wird. Das Standard-C++ - Schlüsselwort ist 'restricte', warum verwenden Sie __restrict? – dirkgently