함수 서명의 배열 길이: 구문론적 호기심
C 및 C의 함수 서명에 배열 길이가 분명히 존재함에도 불구하고 이러한 길이는 효과적으로 무시됩니다. 이 동작은 개발자를 당황하게 만들었고 그 목적에 대한 의문을 제기했습니다.
배열 길이 제어의 환상
다음 C 코드 조각을 고려하세요.
#include <stdio.h> int dis(char a[1]) { return strlen(a); } int main() { char b[4] = "abc"; int c = dis(b); printf("%d\n", c); return 0; }
이 코드에서 dis 함수는 길이가 1([1])인 문자 배열을 기대합니다. 그러나 사용자는 길이가 4인 배열을 전달합니다(b). 놀랍게도 코드는 오류 없이 컴파일되고 실행됩니다. 이는 함수 시그니처에 지정된 배열 길이가 적용되지 않음을 나타냅니다.
배열 구절의 진정한 특성
C 및 C에서는 배열이 값으로 전달되지 않습니다. . 대신 배열의 첫 번째 요소에 대한 포인터가 전달됩니다. 따라서 이 정보는 포인터에서 파생될 수 있으므로 함수 시그니처의 배열 길이 지정은 중복됩니다.
역사적 근거
허용하기로 결정 함수 시그니처의 배열 길이 지정은 C 초기에 이루어졌는데, 이는 아마도 이전 언어의 유산 때문일 것입니다. 이 구문은 호환성을 위해 유지되었지만 개발자에게는 혼란의 원인이 되었습니다.
결론
C 및 C 함수 시그니처에 배열 길이가 있음 실제로 배열 길이를 강제하지 않는 구문상의 문제입니다. 이 동작은 배열 자체가 아닌 배열 요소에 대한 포인터를 포함하는 기본 전달 메커니즘으로 인해 발생합니다. 이 구문은 불필요해 보일 수 있지만 역사적 기원은 현대 C 및 C 프로그래밍 언어에서 확고히 자리 잡았습니다.
위 내용은 C 및 C 함수 서명의 배열 길이가 무시되는 것처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!