๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ‘จ๐Ÿพ‍๐Ÿ’ป C++

์ „์ฒ˜๋ฆฌ๊ธฐ #define

by eazuooz 2022. 8. 22.

์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ

์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ์€ ํ•ด์‹œ ๊ธฐํ˜ธ( )๊ฐ€ ์•ž์— ์˜ค๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์— ํฌํ•จ๋œ ํ–‰ #์ž…๋‹ˆ๋‹ค. ์ด ํ–‰์€ ํ”„๋กœ๊ทธ๋žจ ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์ „์ฒ˜๋ฆฌ๊ธฐ์— ๋Œ€ํ•œ ์ง€์‹œ๋ฌธ์ž…๋‹ˆ๋‹ค . ์ „์ฒ˜๋ฆฌ๊ธฐ๋Š” ์ฝ”๋“œ์˜ ์‹ค์ œ ์ปดํŒŒ์ผ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ ์ผ๋ฐ˜ ๋ช…๋ น๋ฌธ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ง€์‹œ๋ฌธ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ ์€ ํ•œ ์ค„์˜ ์ฝ”๋“œ์—์„œ๋งŒ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ฐœํ–‰ ๋ฌธ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋Š” ์ฆ‰์‹œ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ;์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ ๋์— ์„ธ๋ฏธ์ฝœ๋ก ( )์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ์ด ๋‘˜ ์ด์ƒ์˜ ์ค„์„ ํ†ตํ•ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ค„ ๋์— ์žˆ๋Š” ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž ์•ž์— ๋ฐฑ์Šฌ๋ž˜์‹œ( \)๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋งคํฌ๋กœ ์ •์˜(#define, #undef)

์ „์ฒ˜๋ฆฌ๊ธฐ ๋งคํฌ๋กœ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด #define. ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค . ์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์ด ์ง€์‹œ๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์—์„œ ์˜ ๋ฐœ์ƒ์„ ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ ํ‘œํ˜„์‹, ๋ช…๋ น๋ฌธ, ๋ธ”๋ก ๋˜๋Š” ๋‹จ์ˆœํžˆ ๋ฌด์—‡์ด๋“  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒ˜๋ฆฌ๊ธฐ๋Š” ์ ์ ˆํ•œ C++๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ๋‹จ์ˆœํžˆ ์˜ ๋ฐœ์ƒ์„ ๋Œ€์ฒด ํ•ฉ๋‹ˆ๋‹ค .

#define identifier replacement

identifierreplacementreplacementidentifierreplacement

#define TABLE_SIZE 100
int table1[TABLE_SIZE];
int table2[TABLE_SIZE];

์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ๊ต์ฒด TABLE_SIZE๋˜๋ฉด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

int table1[100];
int table2[100]; 

#define๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ํ•จ์ˆ˜ ๋งคํฌ๋กœ๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

#define getmax(a,b) a>b?a:b

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด getmax2๊ฐœ์˜ ์ธ์ˆ˜๊ฐ€ ๋’ค๋”ฐ๋ฅด๋Š” ์˜ ๋ฐœ์ƒ์„ ๋Œ€์ฒด ํ‘œํ˜„์‹์œผ๋กœ ๋Œ€์ฒดํ•˜์ง€๋งŒ ๊ฐ ์ธ์ˆ˜๋ฅผ ์‹๋ณ„์ž๋กœ ๋Œ€์ฒดํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

// function macro
#include <iostream>
using namespace std;

#define getmax(a,b) ((a)>(b)?(a):(b))

int main()
{
  int x=5, y;
  y= getmax(x,2);
  cout << y << endl;
  cout << getmax(7,x) << endl;
  return 0;
}

์ •์˜๋œ ๋งคํฌ๋กœ๋Š” ๋ธ”๋ก ๊ตฌ์กฐ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. #undef๋งคํฌ๋กœ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ๋ฌธ ์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค .

#define TABLE_SIZE 100
int table1[TABLE_SIZE];
#undef TABLE_SIZE
#define TABLE_SIZE 200
int table2[TABLE_SIZE];

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

int table1[100];
int table2[200];

ํ•จ์ˆ˜ ๋งคํฌ๋กœ ์ •์˜ ๋Š” ๋Œ€์ฒด ์‹œํ€€์Šค์—์„œ ๋‘ ๊ฐœ์˜ ํŠน์ˆ˜ ์—ฐ์‚ฐ์ž( #๋ฐ )๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๋’ค์— ์˜ค๋Š” ์—ฐ์‚ฐ์ž ๋Š” ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค(ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๊ฒƒ์ฒ˜๋Ÿผ).##

#define str(x) #x cout << str(test);

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆ์—ญ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

#define str(x) #x
cout << str(test);

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆ์—ญ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

cout << "test";

์—ฐ์‚ฐ์ž๋Š” ##๋‘ ์ธ์ˆ˜ ์‚ฌ์ด์— ๊ณต๋ฐฑ์„ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ๋‘ ์ธ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

#define glue(a,b) a ## b
glue(c,out) << "test";

์ด๊ฒƒ์€ ๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆ์—ญ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

cout << "test";

์ „์ฒ˜๋ฆฌ๊ธฐ ๊ต์ฒด๋Š” C++ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ ์ „์— ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งคํฌ๋กœ ์ •์˜๋Š” ๊นŒ๋‹ค๋กœ์šด ๊ธฐ๋Šฅ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์žกํ•œ ๋งคํฌ๋กœ์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋Š” ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋˜๋Š” ๊ตฌ๋ฌธ์ด C++์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ผ๋ฐ˜ ํ‘œํ˜„์‹๊ณผ ๋งŽ์€ ๊ฒฝ์šฐ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์กฐ๊ฑด๋ถ€ ํฌํ•จ(#ifdef, #ifndef, #if, #endif, #else ๋ฐ #elif)


์ด ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#ifdef๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •๋œ ๋งคํฌ๋กœ๊ฐ€ ๊ฐ’์— ๊ด€๊ณ„์—†์ด ์ •์˜๋œ ๊ฒฝ์šฐ์—๋งŒ ํ”„๋กœ๊ทธ๋žจ์˜ ์„น์…˜์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

#ifdef TABLE_SIZE
int table[TABLE_SIZE];
#endif

์ด ๊ฒฝ์šฐ ์ฝ”๋“œ ํ–‰์€ ๊ฐ’๊ณผ ๊ด€๊ณ„์—†์ด ๋กœ ์ด์ „์— ์ •์˜ int table[TABLE_SIZE];๋œ ๊ฒฝ์šฐ์—๋งŒ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค . ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•ด๋‹น ํ–‰์€ ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๋ฐ˜๋Œ€์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ ์ง€์‹œ๋ฌธ ์‚ฌ์ด์˜ ์ฝ”๋“œ๋Š” ์ง€์ •๋œ ์‹๋ณ„์ž๊ฐ€ ์ด์ „์— ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:TABLE_SIZE#define

#ifndef#ifndef#endif

#ifndef TABLE_SIZE
#define TABLE_SIZE 100
#endif
int table[TABLE_SIZE];

์ด ๊ฒฝ์šฐ ์ด ์ฝ”๋“œ ์กฐ๊ฐ์— ๋„๋‹ฌํ•  ๋•Œ TABLE_SIZE๋งคํฌ๋กœ๊ฐ€ ์•„์ง ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐ’ 100์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ #define์ง€์‹œ๋ฌธ์ด ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด์ „ ๊ฐ’์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

, ๋ฐ (์ฆ‰ #if, "else if") ์ง€์‹œ๋ฌธ์€ ์ฃผ๋ณ€์˜ ์ฝ”๋“œ ๋ถ€๋ถ„์ด ์ปดํŒŒ์ผ๋˜๊ธฐ ์œ„ํ•ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•˜๋Š” ์ผ๋ถ€ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋งคํฌ๋กœ ํ‘œํ˜„์‹์„ ํฌํ•จํ•˜์—ฌ ์ƒ์ˆ˜ ํ‘œํ˜„์‹ ๋‹ค์Œ์— ๋‚˜์˜ค ๊ฑฐ๋‚˜ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค . ์˜ˆ๋ฅผ ๋“ค์–ด:#else#elif#if#elif

#if TABLE_SIZE>200
#undef TABLE_SIZE
#define TABLE_SIZE 200
 
#elif TABLE_SIZE<50
#undef TABLE_SIZE
#define TABLE_SIZE 50
 
#else
#undef TABLE_SIZE
#define TABLE_SIZE 100
#endif
 
int table[TABLE_SIZE];

์˜ ์ „์ฒด ๊ตฌ์กฐ #if๋ฐ ์—ฐ๊ฒฐ ์ง€์‹œ๋ฌธ #elif์ด . ๋ฐ ์˜ ๋™์ž‘์€ ํŠน์ˆ˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ ํ•˜๊ณ  ๊ฐ๊ฐ any ๋˜๋Š” ์ง€์‹œ๋ฌธ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.#else#endif

#ifdef#ifndefdefined!defined#if#elif

#if defined ARRAY_SIZE
#define TABLE_SIZE ARRAY_SIZE
#elif !defined BUFFER_SIZE
#define TABLE_SIZE 128
#else
#define TABLE_SIZE BUFFER_SIZE
#endif 

๋ผ์ธ ์ œ์–ด(#line)

์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์–ด๋–ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ํŒŒ์ผ์˜ ์ด๋ฆ„๊ณผ ์ค„ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์ฐธ์กฐ์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด #line์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ํŒŒ์ผ ๋‚ด์˜ ์ค„ ๋ฒˆํ˜ธ์™€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ‘œ์‹œํ•  ํŒŒ์ผ ์ด๋ฆ„์„ ๋ชจ๋‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค์Œ ์ฝ”๋“œ ์ค„์— ํ• ๋‹น๋  ์ƒˆ ์ค„ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ๋ถ€ํ„ฐ ์—ฐ์†๋˜๋Š” ์ค„์˜ ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์‹œ๋  ํŒŒ์ผ ์ด๋ฆ„์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

#line number "filename"

number

"filename"

#line 20 "assigning variable"
int a?;

"assigning variable"์ด ์ฝ”๋“œ๋Š” ํŒŒ์ผ 20ํ–‰ ์— ์˜ค๋ฅ˜๋กœ ํ‘œ์‹œ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค .

 

์˜ค๋ฅ˜ ์ง€์‹œ๋ฌธ(#error)

์ด ์ง€์‹œ๋ฌธ์€ ๋ฐœ๊ฒฌ๋˜๋ฉด ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

#ifndef __cplusplus
#error A C++ compiler is required!
#endif

์ด ์˜ˆ์ œ๋Š” ๋งคํฌ๋กœ ์ด๋ฆ„์ด ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค __cplusplus(์ด ๋งคํฌ๋กœ ์ด๋ฆ„์€ ๋ชจ๋“  C++ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์˜๋จ).

์†Œ์Šค ํŒŒ์ผ ํฌํ•จ(#include)

์ด ์ง€์‹œ๋ฌธ์€ ์ด ํŠœํ† ๋ฆฌ์–ผ์˜ ๋‹ค๋ฅธ ์„น์…˜์—์„œ ์—ด์‹ฌํžˆ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ #include์ง€์‹œ๋ฌธ์„ ์ฐพ์œผ๋ฉด ์ง€์ •๋œ ํ—ค๋” ๋˜๋Š” ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค #include.

#include <header>
#include "file" 

์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๊บพ์‡  ๊ด„ํ˜ธ ์‚ฌ์ด ์— ํ—ค๋”<> ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค . iostreamํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ( , string,...) ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ—ค๋”์™€ ๊ฐ™์ด ๊ตฌํ˜„์—์„œ ์ œ๊ณตํ•˜๋Š” ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค . ํ—ค๋”๊ฐ€ ์‹ค์ œ๋กœ ํŒŒ์ผ์ธ์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๊ตฌํ˜„์— ๋”ฐ๋ผ ์ •์˜ ๋˜์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ์ด ์ง€์‹œ๋ฌธ์— ์ ์ ˆํ•˜๊ฒŒ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ์— ์‚ฌ์šฉ๋œ ๊ตฌ๋ฌธ #include์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํŒŒ์ผ ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค . ํŒŒ์ผ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จ ํ•˜๋Š” ๊ตฌํ˜„ ์ •์˜ ๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ƒ‰ ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ง€์‹œ๋ฌธ์„ ํ—ค๋” ๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.""๋”ฐ์˜ดํ‘œ( )๊ฐ€ ๊บพ์‡  ๊ด„ํ˜ธ( )๋กœ ๋Œ€์ฒด๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค <>.

Pragma ์ง€์‹œ๋ฌธ(#pragma)

์ด ์ง€์‹œ๋ฌธ์€ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ต์…˜์€ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„ค๋ช…์„œ ๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค #pragma.

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์— ๋Œ€ํ•œ ํŠน์ • ์ธ์ˆ˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด #pragma๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ์ •์˜๋œ ๋งคํฌ๋กœ ์ด๋ฆ„

๋‹ค์Œ ๋งคํฌ๋กœ ์ด๋ฆ„์€ ํ•ญ์ƒ ์ •์˜๋ฉ๋‹ˆ๋‹ค(๋ชจ๋‘ ๋‘ ๊ฐœ์˜ ๋ฐ‘์ค„ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋๋‚จ _).

 

๋งคํฌ๋กœ ๊ฐ’
__LINE__ ์ปดํŒŒ์ผ ์ค‘์ธ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์˜ ํ˜„์žฌ ์ค„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.
__FILE__ ์ปดํŒŒ์ผ๋˜๋Š” ์†Œ์Šค ํŒŒ์ผ์˜ ์ถ”์ • ์ด๋ฆ„์„ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ž…๋‹ˆ๋‹ค.
__DATE__ ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋œ ๋‚ ์งœ๋ฅผ ํฌํ•จํ•˜๋Š” "Mmm dd yyyy" ํ˜•์‹์˜ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ž…๋‹ˆ๋‹ค.
__TIME__ ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋œ ์‹œ๊ฐ„์„ ํฌํ•จํ•˜๋Š” "hh:mm:ss" ํ˜•์‹์˜ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ž…๋‹ˆ๋‹ค.
__cplusplus ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  C++ ์ปดํŒŒ์ผ๋Ÿฌ์—๋Š” ์ด ์ƒ์ˆ˜๊ฐ€ ์ผ๋ถ€ ๊ฐ’์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฐ’์€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • 199711L: ISO C++ 1998/2003
  • 201103L: ISO C++ 2011
๋น„์ค€์ˆ˜ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด ์ƒ์ˆ˜๋ฅผ ์ตœ๋Œ€ 5์ž๋ฆฌ ๊ธธ์ด์˜ ๊ฐ’์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์™„์ „ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ์ƒ์ˆ˜๊ฐ€ ์œ„์˜ ๊ฐ’ ์ค‘ ์–ด๋А ๊ฒƒ์œผ๋กœ๋„ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
__STDC_HOSTED__ 1๊ตฌํ˜„์ด ํ˜ธ์ŠคํŒ…๋œ ๊ตฌํ˜„ ์ธ ๊ฒฝ์šฐ (๋ชจ๋“  ํ‘œ์ค€ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)
0๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด.

๋‹ค์Œ ๋งคํฌ๋กœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

 

๋งคํฌ๋กœ ๊ฐ’
__STDC__ C: ์— ์ •์˜๋œ ๊ฒฝ์šฐ 1๊ตฌํ˜„์€ C ํ‘œ์ค€์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
C++์—์„œ: ๊ตฌํ˜„์ด ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
__STDC_VERSION__ C์—์„œ:
  • 199401L: ISO C 1990, ์ˆ˜์ • 1
  • 199901L: ISO C 1999
  • 201112L: ISO C 2011
C++์—์„œ: ๊ตฌํ˜„์ด ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
__STDC_MB_MIGHT_NEQ_WC__ 1๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ์ธ์ฝ”๋”ฉ์ด ๋ฌธ์ž ๋ฆฌํ„ฐ๋Ÿด์—์„œ ๋ฌธ์ž์— ๋‹ค๋ฅธ ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
__STDC_ISO_10646__ yyyymmL์œ ๋‹ˆ์ฝ”๋“œ ํ‘œ์ค€ ๋‚ ์งœ ๋’ค์— wchar_t๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ • ํ•˜๋Š” ํ˜•์‹์˜ ๊ฐ’
__STDCPP_STRICT_POINTER_SAFETY__ 1๊ตฌํ˜„์— ์—„๊ฒฉํ•œ ํฌ์ธํ„ฐ ์•ˆ์ „์„ฑ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ( ์ฐธ์กฐ get_pointer_safety)
__STDCPP_THREADS__ 1ํ”„๋กœ๊ทธ๋žจ์ด ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

ํŠน์ • ๊ตฌํ˜„์€ ์ถ”๊ฐ€ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

// standard macro names
#include <iostream>
using namespace std;

int main()
{
  cout << "This is the line number " << __LINE__;
  cout << " of file " << __FILE__ << ".\n";
  cout << "Its compilation began " << __DATE__;
  cout << " at " << __TIME__ << ".\n";
  cout << "The compiler gives a __cplusplus value of " << __cplusplus;
  return 0;
}

 

'๐Ÿ“ Development Study > ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ  (0) 2023.01.03
ํŒŒ์ผ ์ž…์ถœ๋ ฅ  (1) 2022.08.22
exception  (0) 2022.08.22
ํ˜•๋ณ€ํ™˜  (0) 2022.08.22
๋‹คํ˜•์„ฑ  (0) 2022.08.22

๋Œ“๊ธ€