์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

http://changho-myrepository.blogspot.com/2007/10/pragma.html

2007๋…„ 10์›” 17์ผ ์ˆ˜์š”์ผ

#pragma

์•„์ง #pragma๊นŒ์ง„ ์จ๋ณธ์  ์—†์ง€๋งŒ, ์•ž์œผ๋กœ ํ•„์š”ํ• ๊ฒƒ ๊ฐ™์•„์„œ ํผ์™”์Œ
#pragma๋Š” define ์ด๋‚˜ include์™€ ๊ฐ™์ด #์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ „์ฒ˜๋ฆฌ๊ตฌ๋ฌธ(precompiler)์˜ ํ•˜๋‚˜์ด๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ์— ์ข…์†์ ์ธ ๊ตฌ๋ฌธ์ด๋ผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์ œ๋Œ€๋กœ๋œ ๋™์ž‘์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘์— ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์ด ๋ฐ”๋žŒ์ง ํ•˜๊ฒ ๋‹ค.
- ๋Œ€์‹  ๋Œ€์ฒดํ•˜๋Š” ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ๋˜๊ฒ ๋‹ค.
#pragma once
์ด๊ฒƒ์€ "์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ํ•œ๋ฒˆ๋งŒ ์ปดํŒŒ์ผํ•ด!" ๋ผ๊ณ  ๋ช…๋ นํ•œ๋‹ค.
ํ—ค๋”์˜ ์ค‘๋ณต์„ ๋ง‰์•„์ค€๋‹ค.
๋ฌด์Šจ๋ง์ธ๊ฐ€ ํ•˜๋ฉด

a.h๋ฅผ ๊ตฌํ˜„ํ•œ a.cpp, a.h๋Š” ๋…๋ฆฝ์ ์ด๋‹ค.(include๊ฐ€ ์—†๋‹ค.)
b.h๋ฅผ ๊ตฌํ˜„ํ•œ b.cpp, c.h, a.h์ˆœ์„œ๋กœ include
c.h๋ฅผ ๊ตฌํ˜„ํ•œ c.cpp, a.h๋ฅผ include

์ปดํŒŒ์ผํ•˜๋ฉด b.h์—์„œ c.h๋ฅผ ํฌํ•จ์‹œํ‚ค๋ผ๊ณ  ๋˜์–ด์žˆ๋„ค? ํ•˜๊ณ  c.h์— ๋“ค์–ด๊ฐ€๊ณ  ์–ด? a.h๋ฅผ ํฌํ•จํ•˜๋ผ๊ณ  ๊ทธ๋Ÿฌ๋„ค? ์ด๋Ÿฌ๊ณ  a.h๋ฅผ ํฌํ•จํ•œ c.h๊ฐ€ b.h๋กœ ๋Œ์•„์˜จ๋‹ค ๊ทธ๋ฆฌ๊ณ  a.h๋ฅผ ํฌํ•จํ•˜๋ผ๋Š” ๋ช…๋ น์„ ๋ฐ›๊ณ  a.h๋ฅผ ์ถ”๊ฐ€ํ•˜๋‹ค๋ณด๋ฉด ๊ฐ™์€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์„ ์–ธ์ด ๋˜์–ด์žˆ๋‹ค. ์—๋Ÿฌ์—๋Ÿฌ~
๊ฐ™์€ ์„ ์–ธ์ด ๋‘ ๋ฒˆ ๋ฐ˜๋ณต๋˜๋‹ˆ ๋‹น์—ฐํžˆ ์ถฉ๋Œ์ด ๋‚œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋˜‘๋˜‘ํ•˜์—ฌ ๋‹จ์ˆœํžˆ ๊ฒฝ๊ณ  ์ฒ˜๋ฆฌ๋งŒ ํ•ด์ฃผ๊ณ  ์•Œ์•„์„œ ํ•˜๋‚˜๋กœ ์ข…ํ•ฉํ•ด์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ์ ์ธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๊ฑด ์•„๋‹ˆ์ž–์•„~ ํ•œ๋‹ค.
์ด๋Ÿด ๋•Œ ์จ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. pragma once
์ด๋Š” c๊ธฐ๋ณธ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

#ifdef _MYCOMPILECK
#define _MYCOMPILECK
// ํ—ค๋” ํŒŒ์ผ์˜ ๋‚ด์šฉ ์„ ์–ธ
#endif

#pragma comment()
๊ธฐ๋ณธ์ ์ธ pragma comment()์˜ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

#pragma comment( comment-type, ["comment string"] )

[] ์•ˆ์˜ ๊ตฌ๋ฌธ์€ comment-type์— ๋”ฐ๋ผ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
comment type์—๋Š” compiler, exestr, lib, linker, user ๋“ฑ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

#pragma comment( linker, "/subsystem:windows" )
#pragma comment( linker, "/subsystem:console" )

linker ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ console application์ธ์ง€ win32 application์ธ์ง€ ๋ช…์‹œํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ ์„น์…˜์˜ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

#pragme comment( linker, "SECTION:.SHAREDATA,RWS" )

#pragma data_seg("SHAREDATA") ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์œ„์˜ ๋ช…๋ น์–ด ๋Œ€์‹  def ํŒŒ์ผ ์•ˆ์— ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค.

SECTIONS
SHAREDATA READ WRITE SHARED

์ด ์ค‘ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ๋ช…์‹œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งํฌ์ด๋‹ค.

#pragma comment(lib, "xxxx.lib")

์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌ์‹œ์ผœ ์ค€๋‹ค.
์—ฌ๋Ÿฌ์‚ฌ๋žŒ์ด ๊ฐ™์ด ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ lib๋ฅผ ๋งํฌํ•˜๋Š” ๊ฒƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งํฌ๋˜์–ด์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ธฐ์—๋„ ์ข‹๊ณ  ๊ตณ์ด ์ฃผ์„๋‹ค๋ผ ์„ค๋ช…ํ•  ํ•„์š”๋„ ์—†์–ด ์ข‹์ง€ ์•Š๋‚˜ ์‹ถ๋‹ค. (์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์•Œ์ง€๋งŒ ์•„์ง ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰์ค‘ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด ๋ณธ์ ์€ ์—†์Œ)
#pragma data_seg()
pragma data_seg()์˜ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

#pragma data_seg( ["section-name"[, "section-class"] ] )

[]๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

#pragma data_seg( "SHAREDATA" )
int x;
char y;
#pragma data_seg()

DLL ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉํ•ด ๋ณด์•˜๊ณ  ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ ค ํ–ˆ๋˜ ๋ถ€๋ถ„์ด๊ธฐ๋„ ํ•˜๋‹ค.
DLL์˜ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
๊ณต์œ ํ•  ์„น์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์˜ ๋ช…๋ น์–ด๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ์œ„์—์„œ ์‚ฌ์šฉ๋œ ๋‘ ๊ฐ€์ง€์ค‘ ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๋˜์–ด์•ผ ํ•œ๋‹ค.

#pragme comment( linker, "SECTION:.SHAREDATA,RWS" )
SECTIONS
SHAREDATA READ WRITE SHARED

๋‘˜ ๋‹ค ํ•ด๋‹น SECTION(SHAREDATA)์˜ ํ—ˆ์šฉ ๋ฒ”์œ„(?์†์„ฑ?)๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. READ, WRITE, SHARED ์„ธ ๊ฐ€์ง€๋ฅผ ์“ด๋‹ค๋Š” ์˜๋ฏธ~
ํ•ด๋‹น ์‚ฌํ•ญ์— ๋Œ€ํ•ด msdn์—์„œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•ด ์ ์ง€ ๋ชปํ•˜์˜€๋‹ค(๊ฒ€์ƒ‰๋Šฅ๋ ฅ์˜ ๋ถ€์กฑ!!)
์ด์ œ ๋ณ€์ˆ˜ x์™€ y๋Š” ํ•ด๋‹น dll์„ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€ ํŒŒ์ผ๊ณผ ๊ฐ™์ด ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค.(์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.)
์ด๋ ‡๊ฒŒ ๊ณต์œ ํ•˜๋Š” ๋ณ€์ˆ˜๋Š” ๋ฌผ๋ก  new๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋„ ๊ณต์œ  ๊ฐ€๋Šฅํ•˜๋‹ค.
ํŠนํžˆ new ๋‚˜ memalloc(์ด๊ฑด ์•„์ง ๋ฏธํ™•์ธ์ด์ง€๋งŒ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด๋ฏ€๋กœ ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ๋ณธ๋‹ค)์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌํ• ๋‹นํ•œ ๋ณ€์ˆ˜๋“ค์€ dll์™ธ๋ถ€์—์„œ๋„ ํ•ด์ œ(delete) ๊ฐ€๋Šฅํ•˜๋‹ค.
#pragma warning
ํŠน์ • ๊ฒฝ๊ณ ๋ฅผ ๋„๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
๋น„ ์ฅฌ์–ผ ์ŠคํŠœ๋””์˜ค์˜ ๋ฒ„์ „์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋œจ๋Š” ๊ฒฝ๊ณ ๋Š” ๋”๋”์šฑ์ด ๊ท€์ฐฎ์€ ์กด์žฌ์ด๋‹ค.(ํ•˜์ง€๋งŒ ์ˆ˜์ •ํ•ด์„œ ์†ํ•ด๋ณผ ๊ฒƒ์€ ์—†๋‹ค. ๊ทธ๊ฒƒ์ด ๊ณง ๋ฒ„๊ทธ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŠนํžˆ ํ˜•๋ณ€ํ™˜์˜ ๊ฒฝ์šฐ ๊ฐ•์ œ ์บ์ŠคํŒ…ํ•˜์—ฌ ํ™•์‹คํžˆ ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ผ๋ถ€๋Ÿฌ ๊ทธ ๊ฐ’์„ ๋–ผ์–ด๋‚ธ๋‹ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜์ง€๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ๋ณด์—ฌ์ฃผ์ž. ๋ถ€์ง€๋Ÿฐํ• ์ˆ˜๋ก ํ›„์— ์†์ด ๊ฐ€๋Š” ์ผ์ด ์ ์–ด์ง„๋‹ค. ๋…ธ๋ ฅํ•˜์ž~)
ํ˜•์‹์€ ์ด์™€ ๊ฐ™๋‹ค.

#pragma warning( warning-specifier : warning-number-list [; warning-specifier : warning-number-list...] )
#pragma warning( push[ ,n ] )
#pragma warning( pop )

์‹ค์ œ ์‚ฌ์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•œ๋‹ค.

#pragma warning( disable:4996 )

#pragma message()
์ปดํŒŒ์ผ ์ค‘์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ฟŒ๋ ค์ค€๋‹ค.
๋ง์ด ํ•„์š”์—†๋‹ค-.-/

#pragma message("merong")

์ž‘์„ฑ์ž: changho ์œ„์น˜ ์˜ค์ „ 11:18

๋ฐ˜์‘ํ˜•

+ Recent posts