C의 가장 짜증나는 구문 분석: 함수 선언의 미스터리 공개
widget w()의 구문을 이해하는 동안; 간단하기 때문에 많은 프로그래머는 다음 코드 조각이 함수 선언을 어떻게 나타내는지 이해하려고 애쓰고 있습니다.
widget w( gadget(), doodad() ); // pitfall: not a variable declaration
이 수수께끼를 풀려면 C의 붕괴 규칙을 파헤치는 것이 중요합니다. 함수 선언 내에서 배열 유형의 인수는 첫 번째 요소를 가리키는 포인터로 변질되는 반면, 함수 유형의 인수는 함수 포인터로 변환됩니다.
이 원칙을 적용하면 앞서 언급한 코드가 다음 시그니처로 변환됩니다.
widget w( gadget(*)(), doodad(*)() );
이는 두 개의 인수를 허용하는 함수를 나타냅니다. 인수를 사용하지 않고 가젯 유형을 반환하는 함수에 대한 포인터와 인수가 0을 취하고 반환하는 함수에 대한 포인터입니다. 낙서 유형. 함수 자체는 위젯을 반환합니다.
복잡성은 여기서 끝나지 않습니다. 다음과 같은 난해한 예를 생각해 보십시오.
widget w(gadget(x));
x가 변수인데 어떻게 이것이 함수 선언이 될 수 있습니까?
C에서는 변수를 선언할 때 다음과 같이 추가 괄호를 포함하는 것이 허용됩니다. 가젯 x; 및 가젯(x);. 이는 함수 인수에도 적용되므로 위 코드를 가젯 유형의 x라는 인수 하나를 취하고 위젯을 반환하는 함수 선언으로 해석할 수 있습니다.
위 내용은 `widget w(gadget(), doodad());`는 C의 변수 선언입니까 아니면 함수 선언입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!