itsource

void *function()은 기능에 대한 포인터입니까 아니면 void를 반환하는 함수입니까?

mycopycode 2023. 10. 14. 10:07
반응형

void *function()은 기능에 대한 포인터입니까 아니면 void를 반환하는 함수입니까?

나는 그것의 의미에 대해 혼란스럽습니다.void *function().
기능에 대한 포인터입니까, 아니면 기능을 반환하는 것입니까?void*? 포인터를 반환하는 재귀 함수로 항상 데이터 구조에 사용했지만 멀티스레딩에서 코드를 봤을 때 (pthread) 동일한 함수 선언이 있습니다.지금 저는 그들의 차이점이 무엇인지 혼란스럽습니다.

함수에 반환 유형이 있습니다.void *.

void *function();

그래서 나는 항상 그런 경우에는 기호를 구분하는 것을 선호합니다.*등의 함수명에서

void * function();

그리고.Jarod42코멘트에서 가리키는 당신은 C++의 함수 선언을 다음과 같이 후행 반환 유형을 사용하여 다시 쓸 수 있습니다.

auto function() -> void *;

기능하도록 포인터를 선언하려면 다음과 같이 써야 합니다.

void ( *function )();

반환 유형은 다음과 같습니다.void아니면

void * ( *function )();

여기서 반환 유형void *.

또는 포인터를 함수로 되돌리는 함수의 포인터

void * ( *( *function )() )();

C 구문 문제에 대해 확신이 서지 않을 때마다 cdecl 유틸리티(온라인 버전)를 사용하여 통역해 주는 것을 좋아합니다.이것은 C 구문과 영어 사이에서 번역합니다.

예를 들어, 나는 당신의 예를 입력합니다.void *foo()그리고 돌아왔습니다.

foo를 함수로 선언하여 포인터를 무효로 되돌립니다.

다른 구문이 어떻게 생겼는지 확인하기 위해 입력합니다.declare foo as pointer to function returning void그리고 돌아왔습니다.

공백(*foo)()

단일 식에 여러 수준의 유형 캐스트, 별 또는 대괄호가 있을 때 특히 유용합니다.

다음으로 포인터를 반환하는 기능입니다.void.

당신의 선언문을 이렇게 생각해보세요.

void *(function());

이것은 반환되는 함수입니다.void(또는 없음):

void (*function2)();

위의 선언문을 이렇게 생각해 보십시오.

void ((*function2)());

이것들을 쓰는 훨씬 더 쉬운 방법은typedefs:

typedef void *function_returning_void_pointer();
typedef void function_returning_nothing();

function_returning_void_pointer function;
function_returning_nothing *function2;

이것은 일반적으로 함수 포인터를 둘러싼 혼동을 없애고 읽기가 훨씬 쉽습니다.

C/C++의 선언은 연산자 우선 순위 뒤에 식별자에서 바깥쪽으로 읽습니다.

위키피디아에서 C/C++ 연산자 우선순위표를 간단히 살펴보면 함수 호출 연산자가 나타납니다.()간접 연산자보다 우선 순위가 높습니다.*. 따라서 함수 선언에는 다음과 같이 나와 있습니다.

  • 식별자에서 시작합니다.function

  • function()논변이 필요 없는 함수

  • void* function()그리고 a를 반환합니다.void*.

이 일반적인 원리는 배열 선언에도 적용됩니다.[]또한 보다 높은 우선 순위를 가집니다.*)와 둘의 조합. 그래서.

int *(*arr[42])();

로 읽힙니다.

  • arr
  • arr[42], 즉 42개의열들.
  • *arr[42]의 지시
  • (*arr[42])()하지 않는 및
  • int *(*arr[42])()답례하다, 답례하다, 답례하다, 답례하다, 답례하다int*.

이에 익숙해지려면 다소 시간이 걸리지만, 일단 원리를 이해하고 나면 그 선언문들을 명확하게 읽기 쉽습니다.

언급URL : https://stackoverflow.com/questions/58500806/is-void-function-a-pointer-to-function-or-a-function-returning-a-void

반응형