programming/c , c++

[테트리스개발]BOOL WINAPI 반환타입

worldint 2021. 7. 11. 03:21

테트리스를 개발하다가

콘솔창에서 커서위치를 지정해주기 위해<window.h>를 포함시켜야되서 

저런 복잡한 헤더파일들은 어떻게 되어있나 궁금해서 <windows.h>파일을 열어보았다.

찾아찾아가면 <consoleapi2.h> 라는 파일에 아래와 같이 선언되어있는데

보면 SetConsoleCursorPosition() 함수앞에 기본 반환타입(int, char double 등등)말고 처음보는 것 들이 많이있다

데이터타입말고도 여러개를 쓸수있다는것도 신기했고 

저 과로안에 있는 매개변수들도 데이터 타입앞에 _in_ 이런것들도있고 이게 뭐지

 

구글링을 통해 알아보니 일단 WINBASEAPI는 <apisetcconv.h>에

#define WINBASEAPI DECLSPEC_IMPORT 이런식으로 치환되고

 DECLSPEC_IMPORT이거는 또 <rpc.h>에서

#define DECLSPEC_IMPORT __declspec(dllimport) 이렇게 나와있다

매크로로 치환은 이런식으로 여러번 가능한거같다.

나머지들도 다 찾아보면

BOOL이 int형 데이터타입을 치환한거고

WINAPI는 __stdcall 이렇게 나온다

풀어쓰면 

__declspec(dllimport) int __stdcall SetconsoleCursorPosition(_in_ 블라블라,블라블라);

이거인데 

 

dll관련키워드(__declspec(dllimport)   반환타입    호출규격(__stdcall)   함수명(SAL(_in_) 매개변수);

이런 형태로 되어있다.

 

기본적으로 배운 

반환타입 함수명(매개변수1,매개변수2);

이 구조보다 더 복잡하게 되어있다

 

저런 이상한 것들을 확장 속성이라고 하는것 같은데 c언어 표준은 아니라고한다.

확장속성을 사용하면 컴파일러가 저 속성들을 보고 약간의 힌트를 얻어 더 좋은 결과물을 얻는다.