Ich habe eine starke Verwendung des Schlüsselwortes restrict
in einem unserer älteren Projekte bemerkt.
Ich verstehe die Begründung für restrict
, aber ich Frage seine Nützlichkeit, wenn auf einige dieser Funktionen angewendet.Ist das Schlüsselwort restrict bedeutungslos für Parameter eindeutiger Zeigertypen?
Nehmen Sie die folgenden zwei Beispiele:
void funcA(int *restrict i){
// ...
}
void funcB(int *restrict i, float *restrict f){
// ...
}
int main(){
int i = 1;
float f = 3.14;
funcA(&i);
funcB(&i,&f);
}
Gibt es einen triftigen Grund könnte man die Parameter der funcA
und funcB
mit restrict
Tag?
funcA
benötigt nur 1 Parameter. Wie könnte es die gleiche Adresse wie alles andere haben?
funcB
verwendet Parameter verschiedener Typen. Wenn sie die gleiche Adresse wären, würde das nicht schon die strenge Aliasing-Regel brechen?
Wenn die Funktion globale Zeiger/Objekte verwenden kann, denke ich, dass 'restrict' einen Wert hat. – chux
In Bezug auf Zeiger auf verschiedene Typen, C angegeben 'char * fgets (char * beschränken s, int n, FILE * Stream einschränken);' so scheint es das Standard-Komitee sieht Wert mit 'restrict' zu verschiedenen Typen. – chux
Interessant. Obwohl char keine Ausnahme ist, kann char * auf einen anderen Typ verweisen. –