win32_stdcall_cdecl - 8BitsCoding/RobotMentor GitHub Wiki


ํ•จ์ˆ˜์˜ Caller์™€ Callee์— ๋Œ€ํ•ด์„œ

ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” Caller์™€ Callee๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

void main()
{
    Sum(3, 5);
    // Sum์„ Callํ•˜๋Š” main์€ Caller๊ฐ€ ๋œ๋‹ค.
}

void Sum(int param_a, int param_b)
{
    // ํ˜ธ์ถœ๋˜๋Š” Sum์€ Callee๊ฐ€ ๋œ๋‹ค.
}

__stdcall, __cdecl

์šฐ์„  ๊ฐ ์ฐจ์ด์ ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

__stdcall

  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ ์ˆœ์„œ : ์˜ค๋ฅธ์ชฝ -> ์™ผ์ชฝ
  • ์Šคํƒ์ •๋ฆฌ ์ฑ…์ž„ : Callee
  • ํ˜ธ์ถœ ๊ทœ์ •์ด ์ ์šฉ๋˜๋Š” ํ•จ์ˆ˜ : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์ •๋œ ํ•จ์ˆ˜
  • ์ด๋ฆ„ ๋ณ€ํ™˜ ๊ทœ์ • : "_ํ•จ์ˆ˜๋ช…@์ธ์ž๋ชฉ๋ก๋ฐ”์ดํŠธ์ˆ˜"
  • ์‹คํ–‰ ํŒŒ์ผ ํฌ๊ธฐ : ์ž‘๋‹ค

__cdecl

  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ ์ˆœ์„œ : ์™ผ์ชฝ -> ์˜ค๋ฅธ์ชฝ
  • ์Šคํƒ์ •๋ฆฌ ์ฑ…์ž„ : Caller
  • ํ˜ธ์ถœ ๊ทœ์ •์ด ์ ์šฉ๋˜๋Š” ํ•จ์ˆ˜ : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋ณ€์  ํ•จ์ˆ˜
  • ์ด๋ฆ„ ๋ณ€ํ™˜ ๊ทœ์ • : "_ํ•จ์ˆ˜๋ช…"
  • ์‹คํ–‰ ํŒŒ์ผ ํฌ๊ธฐ : ํฌ๋‹ค
  • (์ฐธ๊ณ 1) ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋ณ€์ ์ด๋ผ๋Š” ๋ง์€ printf, scanf๋ฅผ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋  ๊ฒƒ์ด๋‹ค.
  • (์ฐธ๊ณ 2) ์‹คํ–‰ ํŒŒ์ผ์˜ ํฌ๊ธฐ์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ์ด์œ ๋Š” __stdcall์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ด๊ธฐ์— ํ•œ ๋ฒˆ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์žฌ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ, __cdecl์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งค๋ณ€ ๋ณ€๊ฒฝ๋˜๊ธฐ์— ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

WIN32์—์„œ ์ด๊ฑธ ์“ด๋‹ค๊ณ ??? ๋‚œ ๋ณธ์ ์ด ์—†๋Š”๋ฐ??

๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์ด define๋˜์–ด ์žˆ๋‹ค.

#define     CALLBACK    __stdcall
#define     WINAPI      __stdcall
#define     WINAPIV     __cdecl

_fastcall์€ ๋ญ”๊ฐ€?

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์Šคํƒ์ด ์•„๋‹Œ ๋ ˆ์ง€์Šคํ„ฐ๋ฆฌ์— ์ €์žฅ
  • ์Šคํƒ์— ์ธ์ž๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ์— ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ˆ˜ํ–‰์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.