> 백엔드 개발 > C++ > C에서 함수 이름이 함수 포인터로 사용되는 이유는 무엇입니까?

C에서 함수 이름이 함수 포인터로 사용되는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-11 02:29:03
원래의
445명이 탐색했습니다.

Why are Function Names Used as Function Pointers in C?

함수 포인터로서의 함수 이름: 설계 이론적 근거

C에서 함수 이름을 함수 포인터로 사용하는 것은 주소를 적용하는 것과 같습니다. 함수 이름에 연산자를 추가합니다. 이 동작은 언어의 다른 부분과 일치하지 않는 것처럼 보일 수 있으며 설계 근거에 대한 의문을 제기합니다.

ANSI C90 Rationale 문서는 이 설계 결정에 대한 통찰력을 제공합니다.

  1. 편의성 : 더 큰 구조의 일부인 함수 호출을 단순화합니다. 예를 들어 (*graphics.open)(file)을 작성하는 대신 개발자는 더 간결한 graphic.open(file)을 사용할 수 있습니다.
  2. 구문적 유연성: 함수 지정자와 포인터는 호출을 위한 다양한 구문 형식을 가능하게 합니다. 함수:
(&f)();        // Explicit address-of operator
f();            // Implicit conversion to function pointer
(*f)();        // Deference of a function pointer
(**f)();       // Deference twice
(***f)();      // Deference three times
로그인 후 복사
  1. 배열 이름에 대한 포인터의 일관성: 언어에서는 a가 배열인 int*에 &a를 할당하는 것을 금지하지만 동일한 것을 허용합니다. 함수 지정자와 함수 포인터에 대한 연산입니다. 이러한 비대칭성은 함수 지정자를 포인터로 사용하는 것을 금지하는 것보다 덜 해로운 것으로 간주되었습니다.

반환 컨텍스트에서 함수 유형에서 포인터 유형으로의 암시적 변환이 없는 것에 대한 설명은 " 반환 유형 장식." C에서 함수 반환 유형은 함수 서명의 일부이며 수정할 수 없습니다. 따라서 함수는 암시적으로 자신에 대한 포인터를 반환할 수 없습니다.

위 내용은 C에서 함수 이름이 함수 포인터로 사용되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿