Heim >Backend-Entwicklung >C++ >Warum ignorieren C- und C-Compiler Array-Längen in Funktionssignaturen?
Arrays in Funktionssignaturen: Eine merkwürdige Anomalie in C und C
In C und C werden Array-Längen üblicherweise in Funktionssignaturen angegeben mit die Syntax int a[size]. Es kommt jedoch zu einem merkwürdigen Verhalten, wenn diese Längen nicht erzwungen werden.
Der mysteriöse Fall von dis(char a[1])
Bedenken Sie den folgenden Codeausschnitt:
#include <iostream> using namespace std; int dis(char a[1]) { int length = strlen(a); char c = a[2]; // Attempt to access element beyond specified length return length; } int main() { char b[4] = "abc"; int c = dis(b); cout << c; return 0; }
In diesem Beispiel deklariert die Funktion dis einen Array-Parameter a der Größe 1. Das Programm greift jedoch auf Elemente über dieser Größe zu ohne Compilerfehler. Dies wirft die Frage auf: Warum erlauben Compiler Array-Längen in Funktionssignaturen, wenn sie nicht erzwungen werden?
Eine eigenartige Sprachfunktion
Die Antwort liegt in der Art und Weise, wie C und C-Handle-Arrays in Funktionsaufrufen. In Wirklichkeit können Arrays nicht direkt an Funktionen übergeben werden. Stattdessen wird ein Zeiger auf das erste Element des Arrays übergeben, der keine Informationen über die Länge des Arrays enthält.
Daher wird die in der Funktionssignatur angegebene Größe (in diesem Fall [1]) vom Compiler ignoriert . Diese Entscheidung stammt aus den 1970er Jahren und hat zu erheblicher Verwirrung unter Entwicklern geführt.
Auswirkungen auf die Programmierung
Diese Eigenart hat mehrere Auswirkungen:
Obwohl dieses Verhalten rätselhaft erscheinen mag, ist es ein fester Bestandteil der Programmiersprachen C und C. Das Verständnis seiner Auswirkungen ist für eine sichere und effiziente Codeentwicklung von entscheidender Bedeutung.
Das obige ist der detaillierte Inhalt vonWarum ignorieren C- und C-Compiler Array-Längen in Funktionssignaturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!