c 함수 포인터 관련 질문입니다.

파라미터를 가진 함수포인터와 파라미터가 없는 함수포인터의 크기?가 동일한가요?

질문을 처음 해봐서 어색할수도 있습니다. 하지만 혼자서 찾아보다가 막혀서 질문해 봅니다.

운영체제에 따라 달라지는 걸로 알고있어요

표준에서는 보장하지 않으나 일반적으로 같습니다. 보장되는줄 알았는데…ㅠ

아키텍처에 종속적인 문제는 c차원에서 표준으로 정할수 없죠 ㅠㅠ

아뇨, 아키텍처상의 문제가 아니라 한 프로그램 내에서도 함수 포인터들간의 크기가 같음이 보장되지 않습니다.

C99 section 6.3.2.3, paragraph 8:

A pointer to a function of one type may be converted to a pointer to a function of another type and back again; the result shall compare equal to the original pointer.

data loss 없이 convert할 수 있을 뿐, 크기에 대한 언급은 없습니다.

그게 예전에 near 포인터 far 포인터 처럼 나눠서 사용하는 아키텍처 때문에 못정한거 아니에여?

아 그리고 제 말의 뉘앙스는 이제 약간…

C언어 자체가 아키텍처랑 근접한 언어다보니, 표준을 만들때
혹시라도 아키텍쳐의 제약을 줄 수 있을법한 제약사항은
표준으로 넣기 부담스럽다

약간 그런 전체적인 말이엇어요 ㅎㅎㅎ

1 Like

오… near far는 생각도 못했는데 듣고 보니까 킹득력 있습니다…

1 Like

같을지 다를지 실험해보려고 sizeof 함수로 확인하던중에 신기한 현상을 찾았습니다.
vc 컴파일러의 문지인지는 모르나(비주얼만 사용해봐서 ㅠㅠ)
함수 선언시 지정한 파라미터 갯수와 입력받은(그 괄호안에 넣는)파라미터 갯수가 다르면 실행되지 않는것으로 알고 있었는데
함수 포인터로 받아온 경우에는 일치하지 않아도(더 적은경우 포함)컴파일과 실행이 되더군요
혹시 왜 그런 현상이 생기는지 설명해주실수 있나요?..처음보는 상황이라 ㅠㅠ

그거 undefined behavior입니당
Argument랑 parameter랑 갯수다르면 안대요
잘못된거에요.

그리고 그런 잘못을 저질러도 컴파일과 실행이 문제없이 이루어지는 경우가 있습니다. 문법상 잘못된게 아니니까요 Const 캐스팅이나 등등 말이죠

아마 워닝은 뜰겁니다