C/C++ Tip ๊ด๋ จ ์ธ๋ฒ ์งธ ๊ธ์ด๋ค.
๋ญ ์์ฑํ ๊น ๊ณ ๋ฏผ ํ๋ค๊ฐ ์ฝ๋ฉ๋งํผ ์ค์ํ ๋ณ์๋ช
์ ํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ํ๋ค.
๋ณ์๋ช
์ ํ๊ธฐ๊ฐ ์ค์ํ ์ด์ ๋ ๊ฐ๋
์ฑ ๋๋ฌธ์ด๋ค.
๊ฐ๋
์ฑ์ด ๋์ ์ฝ๋๋ ๋ด๊ฐ ์๋ ๋จ์๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํจ์ด๋ค.
์ฌ๊ธฐ์ ๋จ์ด๋ ํ๋ฐฐ, ์์ฌ ๋ฟ๋ง ์๋๋ผ ํ๋ฌ ๋ค์ '๋'๋ ๋จ์ ํฌํจ๋๋ค.
์ฝ๋๋ฅผ ๋ดค์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋
์ํ๋ ๊ฒ์ฒ๋ผ ๋ฐ๋ก ์ ์ถ๊ฐ ๋์ด์ผ ํ๋ค.
๋ณ์๋ช
๊ท์น์ ๋ค ๊ฐ๋ฅผ ๊ผญ ๊ธฐ์ตํ๋ฉด ๋๋ค.
ํจ์์ input parameter(์
๋ ฅ ์ธ์, ์
๋ ฅ ํ๋ผ๋ฏธํฐ)๋ i_{๋ณ์๋ช
}
ํจ์์ output parameter(์ถ๋ ฅ ์ธ์, ์ถ๋ ฅ ํ๋ผ๋ฏธํฐ)๋ o_{๋ณ์๋ช
}
ํจ์์ local ๋ณ์(๋ก์ปฌ, ์ง์ญ ๋ณ์)๋ l_{๋ณ์๋ช
}
static ๋ณ์(์ ์ ๋ณ์) ํน์ ์ ์ญ๋ณ์๋ {๋ณ์๋ช
}
ํ๋์ ์์๋ฅผ ๋ณด๊ฒ ๋ค.
#include <stdio.h>
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
typedef signed char s8;
typedef signed short s16;
typedef signed long s32;
void manyFunc(const u8 i_a, const u8 i_b, u8* const o_sum, u8* const o_sub){
u8 l_sum, l_sub;
l_sum = i_a + i_b; //5
l_sub = i_a - i_b; //6
*o_sum = l_sum;
*o_sub = l_sub;
}
u8 addFunc(const u8 i_a, const u8 i_b){
u8 l_sum;
l_sum = i_a + i_b; //3
return l_sum;
}
int main() {
u8 l_result; //1
u8 l_addResult, l_subResult;
l_result = addFunc(2, 1); //2
manyFunc(2, 1, &l_addResult, &l_subResult); //4
printf("%d\n", l_result); //7
printf("%d, %d\n", l_addResult, l_subResult); //8
return 0;
}
๊ฐ์๊ธฐ typedef๊ฐ ๋์์ ๋นํฉํ๋ค๋ฉด ์ด ๊ธ์ ์ฝ๊ณ ์ค๋ ๊ฒ์ ์ถ์ฒํ๋ค.
https://coding-yoon.tistory.com/246
u8 l_result;
u8 l_addResult, l_subResult;
l_result ๋ฅผ ๋ณด๋ฉด, ์ฐ๋ฆฐ ๊ท์น์ ํ ๋๋ก ๋ก์ปฌ ๋ณ์์์ ์ ์ ์๋ค.
์ด ๋ณ์๋ช
์ ์ฅ์ ์ ์ฒ์์๋ ์ด์ํ ์ ์์ง๋ง, ์ด๋ ๊ฒ ๊ท์น์ ์ ํด๋์ผ๋ฉด, ๋ณด๋ ๊ฒ๋ง์ผ๋ก๋ ๋ก์ปฌ ๋ณ์์ธ์ง ๋ฐ๋ก ํ์ธํ ์ ์๋ค.
l_result, l_addResult, l_subResult ๋ก ์ ์ธํ ์ด์ ๋ main ํจ์์ ๋ก์ปฌ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋๋ฅผ ๊ณ์ ๋ณด๊ฒ ๋ค.
l_result = addFunc(2, 1);
addFunc ํจ์์ ์ง์ ํ๋ค.
u8 addFunc(const u8 i_a, const u8 i_b){
u8 l_sum;
l_sum = i_a + i_b;
return l_sum;
}
์ฝ๋์ ์ธ์๋ฅผ ๋ณด๊ณ ์๋ฌธ์ด ๋๋๊ฒ ์์ ์ ์๋ค.
i_a, i_b๋ ์
๋ ฅ ํ๋ผ๋ฏธํฐ์ ์ const๋ฅผ ๋ถ์ด๋ ๊ฑธ๊น?
const๋ฅผ ๋ถ์ธ๋ค๋ ๊ฑฐ๋ ๋ณ์์ ๊ฐ์ ์์ ํ๋ ๊ฒ์ ๊ธํ๋ ๊ฒ์ ๋ปํ๋ค.
์ด์ ๋ ํ๋์ด๋ค. ์
๋ ฅ ํ๋ผ๋ฏธํฐ์ ์๋ณธ์ ํผ์๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค.
์
๋ ฅ ํ๋ผ๋ฏธํฐ์ ํผ์์ ๋ง์ผ๋ฉฐ, ๊ณ์ฐ๋ ๊ฐ์ ๋ก์ปฌ ๋ณ์์ธ l_sum์ ๋ฆฌํดํ๋ ๋์์ด๋ค.
์ถ๋ ฅ ํ๋ผ๋ฏธํฐ๋ o_{๋ณ์๋ช
}์ ์ด๋ค๊ณ ํ์ง ์์๋๊ฐ?
์ถ๋ ฅ ๋ณ์๊ฐ ํ๋์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ return์ผ๋ก ๋ฝ๋๊ฒ ๋ ํจ์จ์ ์ด๋ค.
๊ธฐ์ตํ์.
์ถ๋ ฅ ๋ณ์๊ฐ ํ๋์ผ ๋๋ return ์ ์ฌ์ฉํ์.
void manyFunc(const u8 i_a, const u8 i_b, u8* const o_sum, u8* const o_sub){
u8 l_sum, l_sub;
l_sum = i_a + i_b;
l_sub = i_a - i_b;
*o_sum = l_sum;
*o_sub = l_sub;
}
์ด์ manyFunc ๋ผ๋ ํจ์์ ๋๋ฌํ๋ค.
์ด๋ฒ์ ํ๋ผ๋ฏธํฐ์ ๋ ์ด์ํ ๊ฐ๋ค์ด ๋ณด์ผ ๊ฒ์ด๋ค. const์ ์์น๋ ์ด์ํ๊ณ .
์ฌ์ง์ด ์ฌ๊ธฐ์๋ถํฐ๋ ํฌ์ธํฐ๊ฐ ์ฌ์ฉ๋๋ค.
C์ ๊ฝ์ธ ํฌ์ธํฐ.
๋ง์ฝ, ์ ์ฝ๋์ ์ดํด์ ์ด๋ ค์์ด ์๋ค๋ฉด ํฌ์ธํฐ ๊ณต๋ถ๋ฅผ ์กฐ๊ธ ๋ ํ๊ณ ์ค๋ ๊ฒ์ ์ถ์ฒํ๋ค.
์ถ๋ ฅ ํ๋ผ๋ฏธํฐ๊ฐ ํ๋ ์ผ๋๋ return์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
๋ ๊ฐ์ผ ๋๋ void ํ์
์ ์ฌ์ฉํ๋ฉฐ, ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค.
๊ท์น์ ๊ฐ๋จํ๋ค. ์
๋ ฅ ํ๋ผ๋ฏธํฐ์ ์๋ณธ ์์ ์ ๋น์ฐํ ๊ธ์ง์ด๋ค.
์
๋ ฅ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ๊ณ์ฐ์ด ์๋ฃ๋ ๊ฐ์ ๋ก์ปฌ ๋ณ์์ ์ ์ฅ๋๋ค.
์ ์ฅ ํ, ํฌ์ธํฐ์ ์ ๊ทผํ์ฌ ์ถ๋ ฅ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๊ธฐ์
ํ๋ค. (o_{๋ณ์๋ช
})
manyFunc(2, 1, &l_addResult, &l_subResult);
๋ฉ์ธ ํจ์๋ก ๋์์ l_addResult, l_subResult ์ ์ถ๋ ฅ ํ๋ผ๋ฏธํฐ์ ์ ์ฅํ๋ ๊ฐ๋จํ ์์ค์ฝ๋์ด๋ค.
โ
ํ์ฌ ์ ๊ท์น์ ํตํด ์์ค์ฝ๋๋ฅผ ์์ฑํ ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์๋ค.
์ ๊ท์น์์ ์ค์ํ ๊ฒ์ ์ ๋ ฅ ํ๋ผ๋ฏธํฐ์ ์ถ๋ ฅ ํ๋ผ๋ฏธํฐ์๋ ๋ณ๋์ ๋ก์ง์ด ๋ค์ด๊ฐ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ด๋ ํ ๊ณ์ฐ ๋ฐ ๋ก์ง ์ฒ๋ฆฌ๊ฐ ๋ ๊ฒฐ๊ณผ ๊ฐ์ ์ค๋ก์ง ๋ก์ปฌ ๋ณ์์ ๋ด๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋์ค์ ์ ์ง๋ณด์ํ๊ธฐ๊ฐ ํจ์ฌ ํธํ๋ค.
์ง๊ธ ๋น์ฅ์์ ์ฝ๋๋ฅผ ๋ดค์ ๋๋ ๊ดํ ๋ ๋ณต์กํด์ง๊ณ , ๋ถํ์ํ๊ฒ ๋ก์ง์ด ๋ค์ด๊ฐ๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, ์ฝ๋๊ฐ ๋ช ๋ฐฑ์ค, ์์ค์ฝ๋๊ฐ ๋ช ์ญ๊ฐ๋ก ์ชผ๊ฐ์ง๋ค๋ฉด,
์ ๊ท์น์ ์์ฒญ๋ ์ฅ์ ์ผ๋ก ๋ค๊ฐ์ฌ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ ๊ท์น์ ์์งํ๊ธฐ ์ด ์ , ํฌ์ธํฐ์ ์ดํด๋ฅผ ์ ์ ๋ก ํ๋ค.โ
ํ์ง๋ง ์ ๊ท์น์ด ์ ๋ต๋ง์ ์๋๋ค. ์์ ์ด ์๊ฐํ๋ ํน์ ํ์ฌ์ ์ค๊ณ ๋ฃฐ๋๋ก ์ต๊ด์ด ๋ฒค๋ค๋ฉด, ํ๋ฌ ํ ๋ด ์ฝ๋๋ฅผ ๋ค์ ๋ดค์ ๋, ์ฝ๋ ๋ถ์ํ๋ ์๊ฐ์ด ํจ์ฌ ์ค์ด๋ ์์ ์ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
'๐ท C์ธ์ด 30๊ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++ Tip] 6. UNION ๊ณต์ฉ์ฒด์ STRUCT ๊ตฌ์กฐ์ฒด๋ก ํจํท ๋ง๋ค๊ธฐ (2) | 2024.09.04 |
---|---|
[C/C++ Tip] 5. ๊ตฌ์กฐ์ฒด ํจ๋ฉ์ ํ์์ฑ (0) | 2024.09.04 |
[C/C++ Tip] 4. ๊ตฌ์กฐ์ฒด ํ์ฉ: ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ (2) | 2024.09.02 |
[C/C++ Tip] 2. #define์ ๋ชฉ์ (0) | 2024.09.01 |
[C/C++ Tip] 1. ๊ฐ๋ฐํ๊ธฐ ์ , typedef ๋ณ๋ช ๋ถ์ฌ. (0) | 2024.09.01 |