์ฐ๋ฆฌ๋ผ C/C++ ๊ฐ๋ฐ ํ๋ฉด Define ๋งคํฌ๋ก๋ฅผ ์์ฃผ ์ ํ๊ฒ ๋๋ค.
์ฌ์ค Define ๋งคํฌ๋ก๊ฐ ์์ค๋ฅผ ๋ณด๊ธฐ ๋ฐ ๋๋ฒ๊น
์ ์ด๋ ค์ด ์ ์ ์ ๊ณต ํ๊ธฐ๋ ํ์ง๋ง
๊ฐ๋ฐ์ ๊ฐ๋
์ฑ ๋ฐ ๋จ์ ๋ฐ๋ณต์ ์ค์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณต ํ๋ค.
๊ทธ๋ผ define ๋งคํฌ๋ก๋ ํ๋ง๋๋ก ๋ฌธ์ ๋๋ ์ซ์ ๊ทธ๋ฆฌ๊ณ ๊ธฐํธ์ ๋ํ์ฌ ํน์ ๋ฌธ์๋ก ์นํ์ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
#define ์ง์ ๋ฌธ์ ๋์ฒด๋ฌธ์
- Define ์์
#define ADD(A,B) A + B
printf( "Define ADD(A,B) : %d, ADD(1,2));
์ด๋ ๊ฒ ์ฌ์ฉํ๋ค
์ฆ ํ๋ฉด์ ๊ฐ์
Define ADD(A,B) : 3 ์ ์ถ๋ ฅ ํ๋ค.
์ด๋ ๊ฒ ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๋ค.
๊ฐ๋ define ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์์ค ์ดํด๊ฐ ์ด๋ ค์ธ ๋๊ฐ ์๋๋ฐ ์ด๋๋
์์ค๋ฅผ ์ดํด ํ ๋ define ๊ฐ์ ๋์ฒด๋ ์์ค ๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ์๊ฐํ๋ฉด ๋๋ค( ๋น์ฐํ ๋ง์ธ๊ฐ ^^; )
๊ทธ๋ฆฌ๊ณ define ๋งคํฌ๋ก์์๋ง ์ฌ์ฉ๋๋ ๋งคํฌ๋ก ์ฐ์ฐ์ 2๊ฐ์ง ์๋๋ฐ # ๊ณผ ## ์ด ๋๊ฐ์ ๋ฌธ์์ด๋ค.
- # : ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด ์ฃผ๋ ์ฐ์ฐ์
- ## : ํ ํฐ ๊ฒฐํฉ ์ฐ์ฐ์
์ด ๋๊ฐ์ง๊ฐ ์ฐ์ธ๋ค.
๊ทธ๋ผ ์์ ๋ฅผ ๋ณด๊ตฌ ๊ฐ์ ์ดํดํด ๋ณด์
# ๋ฌธ์์ด ์์
#define Test(n) printf( #n "\n" )
Test(3)
์ด๋ ๊ฒ ์คํํ๋ฉด
3
๊ฐ์ ์ถ๋ ฅํ๋ค. ์ฆ #n ์ ๋ฌธ์์ด "3"์ ๋ปํ๊ฒ ๋๋ค.
## ๋ฌธ์์ด ์์
#define TOKEN_TEST(n) printf( "token" #n " = %d\n", token ## n )
int token7 = 10;
printf( "token" "7" " = %d\n", token7 );
TOKEN_TEST(7);
์ฌ๊ธฐ์ ์ฌ์ฉ๋ token ##n ์ token7 ์ด๋ผ๋ ## n ์ด ์
๋ ฅ ๊ฐ 7 ๋ก ๋์ฒด ๋์ด์ ๋ฌธ์๊ฐ ์ฐ๊ฒฐ ๋ token7 ๋ก ๋๋ ๊ฒ์ด๋ค.
๋ฌธ์์ด ๋์ฒด๊ฐ ์๋ ์ฝ๋์ ์ฐ๊ฒฐ ๋ ๊ฐ์ธ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ ๋ฉ์ธ์ง
token7 = 10
token7 = 10
- Define ์ค๋ฅ ๊ฒฝ์ฐ
#include <stdio.h>
#define MUL\_A(A,B) A \* B
#define MUL\_B(A,B) (A) \* (B)
int main( int argc, char \*argv\[\] )
{
int nX = 10;
int nY = 20;
// nX(10) + 1 * nY(20) + 2 = 10 + 1 * 20 + 2 = 32
printf( "Define MUL_A : %d * %d = %d\n", nX+1, nY+2, MUL_A( nX+1, nY+2 ) );
// (nX + 1) * (nY + 2) = ( 10 + 1 ) * ( 20 + 2 ) = 242
printf( "Define MUL_B : %d * %d = %d\n", nX+1, nY+2, MUL_B( nX+1, nY+2 ) );
return 0;
}
- ๊ฒฐ๊ณผ ํ๋ฉด
Define MUL_A : 11 * 22 = 32
Define MUL_B : 11 * 22 = 242
์ด๋ ๊ฒ ๊ฐ์ ๋ณ์ ์ฒ๋ฆฌ์ ๋ฐ๋ผ ๊ฐ์ด ๋ฌ๋ผ์ง๋ค.
์ฆ MUL_B ๋ฐฉ์ ์ฒ๋ผ ๊ดํธ ์ฒ๋ฆฌ๋ฅผ ํด ์ฃผ์ด์ผ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
์กฐ๊ฑด ์ฒ๋ฆฌ๋ฌธ
#if, #ifdef, #ifndef, #else, #elif, #endif
๋ณต์ ์ฒ๋ฆฌ
#ifdef _CONDITION1
#ifdef _CONDITION2
_CONDITION ๊ณผ CONDITION2 ๋๊ฐ ๋ชจ๋ ํ์ํจ
#endif
#endif
- AND ๊ฒฝ์ฐ
#if defined _CONDITION1 && defined _CONDITION
_CONDITION1 ๊ณผ _CONDITION2 ๋ชจ๋ ์ ์ ํ์
#endif
#if !defined _CONDITION && !defined _CONDITION2
_CONDITION1 ๊ณผ _CONDITION2 ๋ชจ๋ ์ ์๊ฐ ์๋์ด์ผ ํจ
#endif
- OR ๊ฒฝ์ฐ
#if defined _CONDITION || defined _CONDITION2
_CONDITION1 ๊ณผ _CONDITION2 ๋๊ฐ์ค 1๊ฐ ์ด์ ์ ์ ํ์ํจ
#endif
#if !defined _CONDITION1 || !defined _CONDITION2
_CONDITION1 ๊ณผ _CONDITION2 ๋๊ฐ์ค 1๊ฐ ์ด์ ์ ์๊ฐ ์๋์ด์ผ ํจ
#endif
'Development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MacOS] Sparkle ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ๋ฐ ์ฌ์ฉ๋ฒ (0) | 2023.08.18 |
---|---|
[Qt5] MySQL(MariaDB) Driver ์ธ์ ์ํค๊ธฐ ( ์๋์ฐ ํ๊ฒฝ ) (0) | 2023.07.31 |
์ ๊ท ํํ์ ์ฌ์ฉ๋ฒ ์ ๋ฆฌ (0) | 2023.05.26 |
VI ์ ์ฉํ ๋ช ๋ น์ด ๋ชจ์ (0) | 2023.05.23 |
OpenSSL BIGNUM ( W = G(A)^d x g^D mod n ) ์์ (0) | 2023.04.27 |