C의 가장 짜증나는 구문 분석 재검토
C에서 악명 높은 "가장 짜증나는 구문 분석" 현상은 겉보기에 무해해 보이는 명령문이 해석될 수 있을 때 발생합니다. 함수 선언이나 변수 선언으로. 이로 인해 예상치 못한 동작과 디버그하기 어려운 오류가 발생할 수 있습니다.
한 가지 전형적인 예는 코드 조각입니다.
widget w( gadget(), doodad() );
얼핏 보면 이는 코드 조각에 대한 변수 선언으로 보입니다. 괄호로 묶인 초기화 프로그램이 포함된 w라는 위젯. 그러나 면밀히 조사해 보면 Gadget() 및 doodad()가 함수 호출이며 명령문을 함수 선언으로 만든다는 것을 알 수 있습니다.
배열 유형의 함수 인수가 첫 번째 요소에 대한 포인터로 바뀌기 때문에 모호성이 발생합니다. 함수 유형의 함수 인수는 함수 포인터로 붕괴됩니다. 이는 위 함수의 시그니처가 실제로 다음과 같다는 것을 의미합니다.
widget w( gadget(*)(), doodad(*)() );
즉, 두 개의 함수 포인터를 인수로 사용하고 위젯을 반환합니다.
변수가 있는 경우 훨씬 더 복잡한 경우가 발생합니다. 관련되어 있습니다:
widget w(gadget(x));
x는 변수이므로 이를 함수 선언으로 해석하는 것은 불가능해 보입니다. 그러나 C에서는 변수 선언에 추가 괄호를 허용합니다. 따라서 두 가젯 x; 및 가젯(x); 동일한 변수 x를 선언합니다.
따라서 위 코드는 x라는 가젯 유형의 단일 인수를 취하고 위젯을 반환하는 함수 선언으로 구문 분석될 수 있습니다. 이는 이러한 미묘한 함정을 피하기 위해 C 구문의 복잡성을 이해하는 것이 중요함을 보여줍니다.
위 내용은 C의 \'가장 짜증나는 구문 분석\'이 변수 선언을 함수 선언으로 잘못 해석하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!