>백엔드 개발 >C++ >`widget w(gadget(), doodad());`는 C의 변수 선언입니까 아니면 함수 선언입니까?

`widget w(gadget(), doodad());`는 C의 변수 선언입니까 아니면 함수 선언입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-19 08:43:03745검색

Is `widget w(gadget(), doodad());` a Variable Declaration or a Function Declaration in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.