|
|
||
|
|
||
|
Á¦¸ñ: C¾ð¾î¿Í ¾Ë°í¸®Áò ¸ñÂ÷ |
ÀÌÆäÀÌÁö ÀúÀÛ±ÇÀº ÀúÀÚ¿¡°Ô ÀÖÀ½. |
|
|
ÀúÀÚ: |
ÃÖ±Ù¼öÁ¤ÀÏ:2011-02-20 |
|
|
|
|
|
C¾ð¾î¿Í ¾Ë°í¸®Áò(4)
ÇÔ¼ö¿Í ÇÁ·Î±×·¥ ±¸Á¶
¼¹®
|
ÇÊÀÚÀÇ ¿¬Àç¹° "C¾ð¾î¿Í ¾Ë°í¸®Áò"Àº C¾ð¾î¸¦ ü°èÀûÀ¸·Î ÇнÀÇÑ ÈÄ ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀ» C¾ð¾î·Î ÀÌÇØ ¹× ÀÀ¿ëÇϵµ·Ï µµ¿ÍÁÖ´Â ³»¿ëÀ¸·Î ±¸¼ºÇÑ´Ù. C¾ð¾î´Â ÀÓº£µðµå´Â ¹°·Ð ¸¹Àº Á¤º¸Åë½Å ºÐ¾ß¿¡¼ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î »ç¿ëÇϰí ÀÖ´Ù. ¶ÇÇÑ, ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀº ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹ÖÀÇ ±â¹ÝÀ» ÀÌ·ç´Â Ãʼ®ÀÌ´Ù. ¿À´Ã³¯ ¸¹Àº °øÇÐÀû ÀÀ¿ëÁ¦Ç°µéÀº ÀÚ¿¬°úÇÐ(¼öÇÐ, ÈÇÐ, ¹°¸®)ÀÇ Åä´ë À§¿¡¼ ¸¸µé¾îÁ³´Ù. ÄÄÇ»ÅÍ ÀÀ¿ë ÇÁ·Î±×·¥µé ¶ÇÇÑ ÀڷᱸÁ¶¿Í ¾Ë°í¸®Áò ±â¹Ý¿¡¼ ÄÚµù µÇ¾úÀ¸¸ç, C¾ð¾î´Â ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀ» ±¸ÇöÇϴµ¥ À¯¿ëÇÑ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¼±±¸ÀÚÀÌ´Ù. ÇÊÀÚ´Â ¿À·§µ¿¾È ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀ» ÇнÀÇÑ ³»¿ëÀ» C¾ð¾î·Î ü°èÀûÀ¸·Î ½Ç½ÀÇÏ¿© ±× °á°ú¸¦ ±¸Ã¼ÀûÀ¸·Î È®ÀÎÇÑ ³»¿ëµéÀ» Á¤¸®ÇؿԴÙ. À̰ÍÀ» Åä´ë·Î ¡°C¾ð¾î¿Í ¾Ë°í¸®Áò¡± ¿¬Àç¹°À» ÁýÇÊÇϰí ÀÖ°í ¿©±â¿¡ ÇÊÀÚÀÇ ¸¹Àº ³ë·ÂÀÌ ´ã°ÜÁ® ÀÖ´Ù. µ¶ÀÚ ¿©·¯ºÐµéÀÇ ¸¹Àº °ü½É°ú °Ý·Á Àֱ⸦ ¹Ù¶õ´Ù. ±Û: |
¿¬Àç
Â÷·Ê
|
1. C¾ð¾î ¼Ò°³ 2. ÇüÅÂ, ¿¬»êÀÚ, Ç¥Çö 3. Á¦¾î È帧 4. ÇÔ¼ö¿Í ÇÁ·Î±×·¥ ±¸Á¶ 5. Æ÷ÀÎÅÍ¿Í ¹è¿ 6. ±¸Á¶Ã¼ 7. ¾Ë°í¸®Áò ¼Ò°³ 8. ¼ÒÆÃÀ» ÅëÇÑ ¾Ë°í¸®Áò ºÐ¼® 9. ½ºÅÃ(Stack) ½Ç½À 10. Å¥(Queue) ½Ç½À 11. ¸®½ºÆ®(List) ½Ç½À 12. Æ®¸®(Tree) ½Ç½À 13. ÇØ½Ì(Hash) ½Ç½À 14. ¾Ë°í¸®Áò ¼³°è ¹× ºÐ¼®±â¹ý |
ÇÊÀÚ
¼Ò°³
|
ÇÊÀÚ´Â ÇÐâ½ÃÀý ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼ Á¦¾î ±â¼úÀ» ¹è¿ü°í, 10¿©³âµ¿¾È ½×¾Æ¿Â IT°ü·Ã °³¹ß °æÇèÀ» ¹ÙÅÁÀ¸·Î ¡°¿À¶óŬ½Ç¹«È°¿ëSQLÆ©´×(ÇýÁö¿ø)" Ã¥À» ÁýÇÊÇϰí, "¿ù°£ÀÓº£µðµå¿ùµå" ÀâÁö¿¡ ´Ù¼öÀÇ ±ÛÀ» ±â°íÇÏ¿´´Ù. ¼¿ï´ëº´¿ø Àü»ê½Ç¿¡¼ µ¥ÀÌÅͺ£À̽º
°ü·Ã ÀÏÀ» ÇÏ¸é¼ ÇÐâ½ÃÀýºÎÅÍ ²ÙÁØÈ÷ ÇØ¿Â ¸®´ª½º ¿¬±¸µµ °è¼ÓÇϰí ÀÖ´Ù. ƯÈ÷, ½ºÅÄÆ÷µå´ëÇб³ÀÇ John L. Hennessy ±³¼öÀÇ Àú¼ ¡°Computer
Organization and Design¡± Ã¥À» ÀÐ°í ±íÀº °¨¸íÀ» ¹Þ¾ÒÀ¸¸ç, ÄÄÇ»Åͱ¸Á¶¿Í
ÀڷᱸÁ¶ ¹× ¾Ë°í¸®Áò È¿À²¼º ¿¬±¸¸¦ ÅëÇÑ ±â¼ú¼Àû ÁýÇÊ¿¡ ³ë·ÂÇϰí ÀÖ´Ù. ¶ÇÇÑ, ¿Â¶óÀÎ
»ó¿¡¼ Ä¿³Î¿¬±¸È¸(http://www.kernel.bz/)¶ó´Â À¥»çÀÌÆ®¸¦ ¿î¿µÇÏ¸ç °ü·Ã±â¼úµéÀ» °øÀ¯Çϰí
ÀÖ´Ù. |
¿ä¾à
ÇÔ¼ö´Â ´ë±Ô¸ð ÇÁ·Î±×·¥ ¼öÇà ÀÓ¹«µéÀ» ÀÛÀº ´ÜÀ§·Î ³ª´©´Â ¿ªÇÒÀ» Çϸç Çѹø »ç¿ëÇÑ °ÍÀ» Àç»ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ¶ÇÇÑ ÇÔ¼ö ³»ºÎÀÇ ÀÚ¼¼ÇÑ Äڵ带
¸ðµÎ È®ÀÎÇÏÁö ¾Ê¾Æµµ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÇÁ·Î±×·¥ÀÇ À¯Áö º¸¼ö¼ºÀ» Áõ´ë½ÃÄÑÁØ´Ù. C¾ð¾î´Â ÇÔ¼ö¸¦ È¿À²ÀûÀ̸鼵µ »ç¿ëÇϱ⠽±µµ·Ï ¼³°èÇß´Ù. C ÇÁ·Î±×·¥Àº ÀϹÝÀûÀ¸·Î ÀÛÀº
ÇÔ¼öµéÀÌ ¿©·¯°³ ¸ð¿©¼ ±¸¼ºµÈ´Ù.
¶ÇÇÑ ¼Ò½º ÆÄÀϵéÀÌ ¿©·¯°³·Î ºÐ¸®µÇ¾î ÀÖÀ¸¸ç ÄÄÆÄÀÏ·¯°¡ À̵éÀ» °¢°¢ ÄÄÆÄÀÏÇÑ´Ù. ±×·±´ÙÀ½ ·Î´õ¿¡ ÀÇÇØ ¶óÀ̺귯¸®¿¡ ÀÌ¹Ì ÄÄÆÄÀϵǾî ÀÖ´Â ÇÔ¼öµé°ú
ÇÔ²² ÀûÀçµÈ´Ù. ÇÔ¼ö¸¦
¼±¾ðÇÒ¶§ ¸Å°³º¯¼öÀÇ ÇüŸ¦ ¼±¾ðÇϵµ·Ï ÇÑ´Ù.
ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÇÔ¼ö°¡ ½ÇÁ¦ÀûÀ¸·Î Á¤ÀÇµÉ ¶§ ¸Å°³º¯¼ö ÇüŰ¡ »óÈ£ ÀÏÄ¡ÇÏ´ÂÁö Á¡°ËÇÏ¿© ÄÄÆÄÀÏ ¿À·ù¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.
ÇÔ¼öÀÇ ±âÃÊ
ÇÔ¼ö´Â ¾Æ·¡¿Í °°Àº Çü½ÄÀ¸·Î ±¸¼ºµÈ´Ù. ¡°return-type¡±Àº ÇÔ¼ö°¡ ¹ÝȯÇÏ´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. À̰ÍÀº »ý·«µÇ¸é Á¤¼öÇüÀ¸·Î °£ÁֵȴÙ. ¡°function_name¡±Àº
»ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ÇÔ¼ö¸íÀÌ´Ù. °ýÈ£¾È¿¡
ÀÖ´Â ¡°argument declarations¡±Àº ÇÔ¼ö ¾ÈÀ¸·Î Àü´ÞµÇ´Â ÆÄ¶ó¹ÌÅ͵éÀÇ µ¥ÀÌÅÍ Å¸ÀÔ°ú ¸íĪÀÌ´Ù. ÇÔ¼öÀÇ ¸öü´Â Áß°£°ýÈ£ {}·Î µÑ·¯½Î¿© ÀÖÀ¸¸ç À̰÷¿¡ ÇÔ¼ö°¡ ÀÓ¹«¸¦ ¼öÇàÇϱâ À§ÇÑ °¢Á¾ µ¥ÀÌÅÍ Å¸ÀÔ°ú ¹®ÀåµéÀ» ±â¼úÇÑ´Ù.
return-type function_name
(argument declarations)
{
declarations and statements;
}
ÇÁ·Î±×·¥Àº º¯¼öµé°ú ÇÔ¼öµéÀ»
Á¤ÀÇÇÑ ÁýÇÕÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ÇÔ¼öµé°£ÀÇ
¼ÒÅëÀº ¸Å°³º¯¼ö(ÀԷ°ª)¿Í ¹Ýȯ°ª(Ãâ·Â°ª)À» ÅëÇÏ¿© Çϰųª ¿ÜºÎº¯¼ö¸¦ »ç¿ëÇÑ´Ù. ÇÔ¼öµéÀº ¼ø¼¿¡ »ó°ü¾øÀÌ ¼Ò½º
ÆÄÀϾÈÀÇ ¾î´À °÷À̳ª ³ªÅ¸³¯ ¼ö ÀÖ°í, ¼Ò½º ÇÁ·Î±×·¥ ÆÄÀÏÀº ¿©·¯°³·Î ³ª´ ¼ö ÀÖ´Ù.
°£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇÏ¿© ÇÔ¼ö¸¦
ÀÌÇØÇØ º¸µµ·Ï ÇÏÀÚ. ¸ÕÀú, ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í main¿¡ ½ÇÇà ¹®ÀåµéÀ» ¸ðµÎ ±â¼úÇÑ °ÍÀ»
½Ç½ÀÇØ º¸ÀÚ.
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: ÇÔ¼öÀDZâÃÊ */ #include <stdio.h> main () { int a = 10, b = 20; printf("a = %d\n", a); printf("b = %d\n", b); printf("a+b = %d\n", a + b); printf("\nPress any key to end..."); getchar(); } |
(½ÇÇà °á°ú)
|
$ cc -o fn01 ch0401_fn01.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./fn01 ©¬ ½ÇÇà a = 10 b = 20 a+b = 30 Press any key to end... |
¾Æ·¡´Â À§ÀÇ ¿¹Á¦¸¦ ÇÔ¼ö·Î ±â¼úÇÑ °ÍÀ¸·Î¼
½ÇÇà°á°ú´Â µ¿ÀÏÇÏ´Ù.
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: ÇÔ¼öÀÇ ±âÃÊ */ #include <stdio.h> //ÇÔ¼ö¼±¾ð void fn_a (int
a); void fn_b (int
b); int fn_ab (int
a, int b); main () { int a = 10, b = 20; fn_a
(a); fn_b
(b); printf("a+b = %d\n", fn_ab (a, b)); printf("\nPress any key to end..."); getchar(); } //ÇÔ¼öÁ¤ÀÇ void fn_a (int
a) { printf("a = %d\n", a); } //ÇÔ¼öÁ¤ÀÇ void fn_b (int
b) { printf("b = %d\n", b); } //ÇÔ¼öÁ¤ÀÇ int fn_ab (int
a, int b) { int c; c
= a + b; return c; } |
(½ÇÇà °á°ú)
|
$ cc -o fn02 ch0401_fn02.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./fn02 ©¬ ½ÇÇà a = 10 b = 20 a+b = 30 Press any key to end... |
¾ÕºÎºÐ¿¡¼ ÇÔ¼ö°¡ ¹ÝȯÇÏ´Â
µ¥ÀÌÅÍ Å¸ÀÔÁß¿¡¼ ¹Ýȯ µ¥ÀÌÅͰ¡ ¾ø´Â voidÇü°ú int(Á¤¼ö)Çü¿¡ ´ëÇØ¼ °æÇèÇØ º¸¾ÒÀ¸³ª, ÀÌÁ¦´Â ´Ù¾çÇÑ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ´ëÇØ¼
»ìÆìº¸µµ·Ï ÇÏÀÚ. ¼öÇÐÀûÀÎ
°è»êÀ» À§ÇÑ ¸¹Àº ÇÔ¼öµé(sqrt, sin, cos..)Àº ´ëºÎºÐ
doubleÇüÀÇ µ¥ÀÌÅ͸¦ ¹ÝȯÇÑ´Ù. ¹°·Ð ´Ù¸¥ ¸ñÀûÀ¸·Î Ư¼ºÈµÈ ÇÔ¼öµéÀº ÇØ´ç ¸ñÀû¿¡ ¸Â´Â µ¥ÀÌÅ͸¦
¹ÝȯÇϵµ·Ï ÇÑ´Ù. ¿¹¸¦µé¾î
¹®ÀÚ¿À» ½Ç¼ö·Î º¯È¯ÇÏ´Â atof()ÇÔ¼ö¸¦ ÀÌÇØÇØ º¸µµ·Ï ÇÏÀÚ. atof()ÇÔ¼ö´Â ÆÄ¶ó¹ÌÅÍ·Î ÀԷ¹ÞÀº ¹®ÀÚ¿ sÀ» doubleÇüÀÇ ½Ç¼ö·Î º¯È¯ÇÏ´Â °ÍÀ¸·Î, ¾Õ¿¡¼ ÀÌ¹Ì ½Ç½ÀÇØº» atoi()ÇÔ¼öÀÇ È®ÀåÇüÀÌ´Ù. atof()ÇÔ¼ö´Â ºÎÈ£¿Í ¼Ò¼ýÁ¡, Á¤¼öºÎ¿Í ¼Ò¼öºÎ¸¦ ó¸®ÇÑ´Ù. À̰ÍÀº Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö·Î¼ <stdlib.h> Çì´õÆÄÀÏ¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
#include <ctype.h>
double
atof(char s[])
{
double
val, power;
int i,
sign;
for (i =
0; isspace(s[i]); i++) //ÈÀÌÆ® ½ºÆäÀ̽º ¹«½Ã
;
sign =
(s[i] == '-') ? -1 : 1;
if (s[i]
== '+' || s[i] == '-')
i++;
for (val =
0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i]
== '.')
i++;
for (power
= 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10;
}
return
sign * val / power;
}
Âü°íÀûÀ¸·Î, atof ÇÔ¼ö°¡ ¹ÝȯÇÏ´Â doubleÇüÀ» intÇüÀ¸·Î Çüº¯È¯(cast)Çϸé
atoi ÇÔ¼ö¿Í µ¿ÀÏÇÑ °á°ú¸¦ ¾òÀ» ¼ö Àִµ¥, À̰ÍÀ» Ȱ¿ëÇÏ¿© atoi ÇÔ¼ö¸¦ ´Ù½Ã ÀÛ¼ºÇÏ¸é ¾Æ·¡¿Í °°´Ù.
//atof
ÇÔ¼ö¸¦ Ȱ¿ëÇÏ¿© ¹®ÀÚ¿À»
Á¤¼öÇüÀ¸·Î º¯È¯
int
atoi(char s[])
{
double
atof(char s[]); //atof ÇÔ¼ö ¼±¾ð
return
(int) atof(s); //Á¤¼öÇüÀ¸·Î Çüº¯È¯
}
¿ÜºÎ º¯¼öµé
C ÇÁ·Î±×·¥Àº ¿ÜºÎ º¯¼öµéÀ̳ª ÇÔ¼öµéÀÇ ÁýÇÕÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¿ÜºÎ(external)´Â ³»ºÎ(internal)¶ó´Â ÀÇ¹Ì¿Í ¹Ý´ëµÇ´Â °³³äÀÌ´Ù. ¿ÜºÎ´Â ÇÔ¼ö ¹Ù±ùÂÊ, ³»ºÎ´Â ÇÔ¼ö ¾ÈÂÊÀ» ÀǹÌÇÑ´Ù. ¿ì¸®°¡ Áö±Ý±îÁö »ç¿ëÇØ¿Â º¯¼öµéÀº ÇÔ¼ö ¾ÈÂÊ¿¡ Á¤ÀÇÇÑ ³»ºÎ º¯¼öµéÀ̾úÀ¸¸ç
ÇÔ¼ö¿¡ Àü´ÞµÇ´Â ÆÄ¶ó¹ÌÅÍ ¶ÇÇÑ ³»ºÎ º¯¼öÀÌ´Ù.
¿ÜºÎ º¯¼öµéÀº ÇÔ¼ö ¹Ù±ùÂÊ¿¡ Á¤ÀÇ µÇ¹Ç·Î ¼Ò½º ÆÄÀϳ»ÀÇ ¸ðµç ÇÔ¼ö¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹Ý¸é¿¡, ³»ºÎ º¯¼öµéÀº ÇÔ¼ö ¾È¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö ÀÚ½ÅÀº Ç×»ó ¿ÜºÎÀÌ´Ù. C¾ð¾î´Â ÇÔ¼ö¸¦ Á¤ÀÇÇÒ¶§ ¶Ç ´Ù¸¥ ÇÔ¼öÀÇ ³»ºÎ¿¡´Â Á¤ÀÇÇÏÁö ¸øÇÑ´Ù.
¿ÜºÎ º¯¼ö´Â ÇϳªÀÇ ¼Ò½º ÆÄÀϳ»¿¡¼
Àü¿ªÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÇÔ¼öµé »çÀÌ¿¡¼ µ¥ÀÌÅ͸¦ ±³È¯Çϱâ À§ÇÑ ¸Å°³º¯¼ö³ª ¹Ýȯ°ªµéÀ» ´ë½ÅÇÒ ¼ö ÀÖ´Ù. ¿ÜºÎ º¯¼ö°¡ Á¤ÀÇµÈ ÇÏ´ÜÀÇ ¸ðµç ÇÔ¼ö¿¡¼ ¿ÜºÎ º¯¼ö¿¡ Á¢±ÙÇÒ
¼ö ÀÖ´Ù. ÇÔ¼öµé°£¿¡
¸¹Àº ¼öÀÇ º¯¼öµéÀ» °øÀ¯ÇØ¾ß ÇÑ´Ù¸é, ±æ´Ù¶õ ¸Å°³º¯¼ö ¸®½ºÆ®¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù ¿ÜºÎ º¯¼öµéÀ» »ç¿ëÇÏ´Â
°ÍÀÌ Á»´õ ÆíÇϰí È¿À²ÀûÀÏ ¼ö ÀÖ´Ù.
±×·¯³ª ¿ÜºÎ º¯¼öµéÀ» ³Ê¹« ³²¿ëÇÏ°Ô µÇ¸é ÇÔ¼öµé °¢°¢ÀÇ µ¶¸³¼ºÀÌ ºÎÁ·ÇØ Áö¹Ç·Î ÀüüÀûÀÎ ÇÁ·Î±×·¥ ±¸Á¶¿¡ ³ª»Û ¿µÇâÀ» ¹ÌÄ¥
¼ö ÀÖ´Ù.
¿µ¿ª(scope) ±ÔÄ¢µé
C ÇÁ·Î±×·¥À» ÀÌ·ç´Â ÇÔ¼öµé°ú ¿ÜºÎº¯¼öµéÀº µ¿½Ã¿¡ ÄÄÆÄÀÏ µÇÁö ¾Ê¾Æµµ µÈ´Ù. ÇÁ·Î±×·¥ ¼Ò½ºµéÀº ¿©·¯°³ÀÇ ÆÄÀϵ鿡
³ª´©¾îÁ® ÀÖÀ» ¼ö ÀÖ°í, ÀÌ¹Ì ÄÄÆÄÀÏµÈ ·çƾµéÀº ¶óÀ̺귯¸®¿¡ ÀúÀåµÉ ¼öµµ ÀÖ´Ù. ¿µ¿ª(scope)Àº »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ¸íĪÀÌ ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ´Â ¹üÀ§(¼ö¸í)¸¦ ÀǹÌÇÑ´Ù. ÇÔ¼ö¾ÈÀÇ ½ÃÀÛ ºÎºÐ¿¡¼ ¼±¾ðµÈ ÀÚµ¿ º¯¼öÀÇ ¿µ¿ªÀº ±× ÇÔ¼ö ³»ºÎÀÌ´Ù. ³»ºÎ º¯¼ö´Â ±×°ÍÀÌ Á¤ÀÇµÈ °¢°¢ÀÇ
ÇÔ¼ö¾È¿¡¼ Åë¿ëµÇ¹Ç·Î °¢°¢ÀÇ ÇÔ¼ö¸¶´Ù µ¿ÀÏÇÑ À̸§ÀÇ º¯¼ö°¡ À־ ¹®Á¦µÇÁö ¾Ê´Â´Ù. ÇÔ¼ö·Î Àü´ÞµÇ´Â ÆÄ¶ó¹ÌÅ͵鵵 ³»ºÎ º¯¼ö¿Í µ¿ÀÏÇÑ Àǹ̷ΠÃë±ÞµÈ´Ù. ¿ÜºÎº¯¼ö¿Í ÇÔ¼ö´Â ÆÄÀϳ»ºÎ¿¡¼
±×µéÀÌ ¼±¾ðµÈ À§Ä¡¿¡¼ºÎÅÍ ÆÄÀÏÀÇ ³¡±îÁö Åë¿ëµÈ´Ù.
ÇÁ·Î±×·¥ ¼Ò½º ÆÄÀÏÀÌ µÎ°³
ÀÌ»óÀ¸·Î ³ª´©¾îÁ® ÀÖÀ»¶§, ¼Ò½º ÆÄÀϰ£¿¡ ¿ÜºÎº¯¼ö¸¦ µ¿ÀÏÇÏ°Ô Ãë±ÞÇÏ·Á¸é extern À̶ó°í ¼±¾ðÇØ ÁÖ¾î¾ßÁö µ¿ÀÏÇÑ ±â¾ïÀå¼Ò¸¦ »ç¿ëÇÑ´Ù.
¿¹¸¦µé¸é,
in file1.c:
extern int sp;
extern double
val;
in file2.c:
int sp = 0;
double val;
À§¿Í °°ÀÌ file1.c¿Í file2.c¿¡¼
sp¿Í valÀ» µ¿ÀÏÇÑ ¿ÜºÎº¯¼ö·Î »ç¿ëÇÏ·Á¸é file1.c¿¡ externÀ¸·Î ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù.
Çì´õ ÆÄÀϵé
¿ì¸®´Â ÀÌ¹Ì ¾Õ¿¡¼ #include <stdio.h> Çì´õÆÄÀÏÀ» º¸¾ÒÁö¸¸, À̰Ϳ¡ ´ëÇÑ ÀÚ¼¼ÇÑ °³³äÀ» Áö±ÝºÎÅÍ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. Çì´õÆÄÀÏÀº ´Ù¸¥ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â ÇÔ¼ö¸¦ »ç¿ëÇϰíÀÚÇÒ ¶§
±× ÇÔ¼öÀÇ ¼±¾ðºÎ¸¦ ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. º¯¼ö¸¦ »ç¿ëÇÒ¶§ ¹Ì¸® º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¼±¾ðÇÏ°í »ç¿ëÇÒ ¼ö
ÀÖ´Â °Íó·³ ÇÔ¼ö ¶ÇÇÑ ¹Ì¸® ¼±¾ðÇØ ÁÖ¾î¾ß Çϴµ¥, À̶§ ´Ù¸¥ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â ÇÔ¼ö´Â Çì´õÆÄÀÏ¿¡
¼±¾ðºÎ¸¦ ±â¼úÇÏ°í ±× ÇÔ¼ö¸¦ »ç¿ëÇϰíÀÚ ÇÏ´Â ÆÄÀÏ¿¡¼ ÇØ´ç Çì´õÆÄÀÏÀ» #include·Î Æ÷ÇÔ½ÃÄÑ ÁÖ¾î¾ß
ÇÑ´Ù.
Çì´õÆÄÀÏÀº ÇÁ·Î±×·¥ ¼Ò½º¸¦ ¿©·¯°³ÀÇ ÆÄÀÏ·Î ³ª´©¾î¼ °¢°¢ ºÐ¸®µÈ ÇüÅ·ΠÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇÑ´Ù.
¶ÇÇÑ, ÀÌ¹Ì ÄÄÆÄÀÏµÈ ÆÄÀÏ(¶óÀ̺귯¸®)¿¡ ÀÖ´Â ÇÔ¼ö¸¦ »ç¿ëÇϰíÀÚ ÇÒ¶§µµ »ç¿ëÇÑ´Ù. ±Ô¸ð°¡ Å« ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§ ¼Ò½º¸¦ ¿©·¯°³ÀÇ ÆÄÀÏ·Î ³ª´©¾î¼
ÀÛ¼ºÇÏ´Â °ÍÀÌ ÇÊ¿äÇϸç, À̶§ »ç¿ëÇÏ´Â ´Ù¾çÇÑ ÇÔ¼öµéÀÇ ¼±¾ðºÎ¸¦ °øÅëµÈ Çì´õÆÄÀÏ ¾È¿¡ ¸ð¾Æ¼ ÀÛ¼ºÇØ
µÎ´Â °ÍÀÌ È¿À²ÀûÀÌ´Ù.
°íÁ¤(Static) º¯¼öµé
¿ÜºÎ °íÁ¤(Static) ¼±¾ðÀº ÇÔ¼öµéÀ» ¼±¾ðÇÒ¶§ ÀÚÁÖ »ç¿ëÇÑ´Ù. ÇÔ¼ö¸íµéÀº Àü¿ªÀûÀ̱⠶§¹®¿¡
ÇÁ·Î±×·¥ Àüü¿¡¼ Á¢±Ù°¡´ÉÇÏ´Ù. ±×·¯³ª, ÇÔ¼ö°¡ °íÁ¤(Static)À¸·Î ¼±¾ðµÇ¸é ÀÌ ÇÔ¼ö°¡ ¼±¾ðµÈ ÆÄÀϳ»¿¡¼¸¸
Á¢±Ù°¡´ÉÇÏ°í ´Ù¸¥ ÆÄÀÏ¿¡¼´Â Á¢±Ù ºÒ°¡´ÉÇÏ´Ù.
°íÁ¤(static) ¼±¾ðÀº ³»ºÎ º¯¼öµé¿¡µµ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ³»ºÎ º¯¼ö´Â ÇÔ¼ö°¡ ½ÇÇàµÉ¶§ ÇÒ´ç µÇ¾ú´Ù°¡ ÇÔ¼ö ½ÇÇàÀÌ Á¾·áµÇ¸é
ÇÒ´ç ÇØÁ¦ µÇÁö¸¸, ³»ºÎ º¯¼ö¸¦ °íÁ¤À¸·Î ¼±¾ðÇϸé ÇÔ¼öÀÇ È°µ¿ ¿©ºÎ¿¡ »ó°ü¾øÀÌ ³»ºÎ °íÁ¤ º¯¼ö°¡ ¼±¾ðµÈ
ÇÔ¼öÀÇ ³»ºÎ¿¡ Áö¼ÓÀûÀ¸·Î ³²¾ÆÀÖ°Ô µÈ´Ù.
Áï, ³»ºÎ °íÁ¤ º¯¼ö´Â ÇØ´ç ÇÔ¼ö ³»ºÎ¿¡¼ ÀڽŸ¸ÀÇ ÀúÀå°ø°£À» Áö¼ÓÀûÀ¸·Î °¡Áö°í
Àִ´Ù.
·¹Áö½ºÅÍ º¯¼öµé
·¹Áö½ºÅÍ(register) ¼±¾ðÀº º¯¼ö¸¦ CPUÀÇ
·¹Áö½ºÅÍ¿¡ À§Ä¡Çϵµ·Ï ÄÄÆÄÀÏ·¯¿¡°Ô Áö½ÃÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. º¯¼ö°¡ CPUÀÇ ·¹Áö½ºÅÍ¿¡
À§Ä¡Çϸé 󸮼ӵµ°¡ »¡¶óÁø´Ù. ´Ü, ·¹Áö½ºÅÍ(register) ¼±¾ðÀº ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ¼ ¼±ÅÃÀûÀ¸·Î ¹Þ¾Æµé¿©
Áø´Ù. ·¹Áö½ºÅÍ(register) ¼±¾ðÀº ´ÙÀ½°ú °°´Ù.
register int x;
register char c;
·¹Áö½ºÅÍ º¯¼ö´Â ¾Æ·¡Ã³·³ ÀÚµ¿ º¯¼ö³ª ÇÔ¼öÀÇ ÆÄ¶ó¹ÌÅÍ º¯¼ö¿¡ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
function (register unsigned m, register
long n)
{
register
int i;
...
}
½ÇÁ¦ÀûÀ¸·Î ·¹Áö½ºÅÍ º¯¼öµéÀº Á¦¾à»çÇ×µéÀÌ ÀÖ´Ù. ·¹Áö½ºÅÍ´Â ¿ë·®ÀÌ Á¦ÇѵǾî Àֱ⠶§¹®¿¡ ´ÜÁö ¸î°³ÀÇ º¯¼öµé¸¸
·¹Áö½ºÅÍ¿¡ ¹èÄ¡µÉ ¼ö ÀÖ´Ù. ·¹Áö½ºÅÍ
¼±¾ðÀÌ ¼ö·® Á¦ÇÑÀ» ÃʰúÇϸé ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ¼ ¹«½ÃµÇ±â ¶§¹®¿¡ ¹®Á¦´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ·¹Áö½ºÅÍ´Â ÁÖ¼Ò°¡ ¾ø±â ¶§¹®¿¡ ÁÖ¼Ò(Æ÷ÀÎÅÍ)¸¦ ÅëÇØ¼´Â Á¢±ÙÇÒ ¼ö ¾ø´Ù. ±âŸ ·¹Áö½ºÅÍ º¯¼öÀÇ Æ¯Â¡Àº ¸Ó½Å(CPU)ÀÇ Á¾·ù¿¡ ÀÇÁ¸ÇÑ´Ù.
ºí·Ï ±¸Á¶
C¾ð¾î´Â ÇÔ¼ö ³»ºÎ¿¡¼ ¶Ç´Ù¸¥ ÇÔ¼ö¸¦ Á¤ÀÇÇÏÁö ¸øÇÏÁö¸¸,
º¯¼öµéÀº ÇÔ¼ö ³»ºÎ¿¡¼ ºí·° ±¸Á¶·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. C¾ð¾î¿¡¼ ºí·ÏÀº Áß°£°ýÈ£ {À¸·Î
½ÃÀÛÇØ¼ }À¸·Î ³¡³´Ù. ºí·Ï¾È¿¡ ¼±¾ðµÈ º¯¼ö´Â ºí·ÏÀÌ ³¡³ª´Â °÷¿¡¼ ¼Ò¸êµÈ´Ù. ¾Æ·¡ Äڵ忡¼
if (n > 0) {
int
i; //iº¯¼ö
¼±¾ð
for (i =
0; i < n; i++)
...
}
ÇÔ¼ö·Î Àü´ÞµÇ´Â ¸Å°³º¯¼öµµ ÀÚµ¿º¯¼öÀÌ´Ù. ¾Æ·¡ Äڵ忡¼ ÇÔ¼ö f()·Î
Àü´ÞµÇ´Â double x´Â ÇÔ¼ö f()ÀÇ ºí·Ï ³»ºÎ¿¡¼¸¸
À¯È¿Çϰí ÇÔ¼ö f()ÀÇ ºí·ÏÀ» ¹þ¾î³ª¸é ¼Ò¸ê µÇ¹Ç·Î »ó´Ü¿¡¼ Àü¿ªº¯¼ö·Î ¼±¾ðµÈ int x¿Í º¯¼ö¸íÀº °°Áö¸¸ ´Ù¸¥ µ¥ÀÌÅÍ Å¸ÀÔÀÎ double·Î Ãë±ÞµÈ´Ù. Áï, º¯¼ö x´Â ÇÔ¼ö f()ÀÇ
ºí·Ï ¿ÜºÎ¿¡¼´Â Á¤¼öÇüÀ¸·Î ÇÔ¼ö f()ÀÇ ºí·Ï ³»ºÎ¿¡¼´Â doubleÇüÀ¸·Î
Ãë±ÞµÈ´Ù.
int x;
int y;
f(double x)
{
double y;
}
±×·¯³ª À§ÀÇ ÄÚµå¿Í °°ÀÌ º¯¼ö¸í xÀ» ºí·Ï ¿ÜºÎ¿Í ³»ºÎ¿¡¼ µ¿ÀÏÇÑ ¸íĪÀ¸·Î »ç¿ëÇÏ´Â °ÍÀº Äڵ带
À¯Áö º¸¼öÇÒ¶§ È¥µ¿ÀÇ ¹®Á¦°¡ ÀÖÀ¸¹Ç·Î ÇÇÇÏ´Â °ÍÀÌ ÁÁ´Ù.
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: ºí·°±¸Á¶ */ #include <stdio.h> main() { int
n = 10; int i = 20; if
(n > 0) { int i; //»õ·Î¿îº¯¼öi ¼±¾ð for (i = 0; i < n; i++)
printf ("%d ", i); printf
("\ni=%d\n", i); }
else { int i = 30; } printf ("i=%d\n", i); printf("\nPress any key to end..."); getchar(); } |
(½ÇÇà °á°ú)
|
$ cc -o ch0408 ch0408_block01.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./ch0408
©¬ ½ÇÇà 0 1 2 3 4 5 6 7 8 9 i=10 i=20 Press any key to end... |
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: ºí·°±¸Á¶ */ #include <stdio.h> static int
x, y; fn (double
x) { double
y; y = x; printf ("y=%f\n", y); } main () { x = 10; y = 20; fn (2.71828); printf("\nPress any key to end..."); getchar(); } |
(½ÇÇà °á°ú)
|
$ cc -o ch0408 ch0408_block02.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./ch0408
©¬ ½ÇÇà y=2.718280 Press any key to end... |
ÃʱâÈ
º¯¼öÀÇ ÃʱâÈ¿¡ ´ëÇØ¼ Áö±Ý±îÁö ¿©·¯¹ø ¾ð±ÞµÇ¾úÀ¸³ª, ¸î°¡Áö Áß¿äÇÑ »çÇ×À» ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
º¯¼ö¸¦ ¼±¾ðÇÒ¶§ ´ëÀÔ(=) ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© Ãʱâȸ¦ ¸í½ÃÀûÀ¸·Î ÇÏÁö ¾ÊÀ¸¸é, ¿ÜºÎ(external) º¯¼ö¿Í °íÁ¤(static) º¯¼ö´Â ¿µÀ¸·Î ÃʱâÈ µÇ°í, ÀÚµ¿(automatic) º¯¼ö¿Í ·¹Áö½ºÅÍ(register) º¯¼ö´Â ÃʱâÈ
µÇ´Â °ª ¾øÀÌ ÀÓÀÇÀÇ °ª(garbage)ÀÌ µé¾î°£´Ù. º¯¼öÀÇ ÃʱâÈ´Â ¾Æ·¡¿Í °°ÀÌ ´ëÀÔ(=) ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î ÇÒ ¼ö ÀÖ´Ù.
int x = 1;
char squota = "\'";
long day = 1000L * 60L * 60L *
24L; /* milliseconds/day */
¿ÜºÎ¿Í °íÁ¤ º¯¼ö´Â ÃʱâÈ µÇ´Â °ªÀÌ »ó¼ö°ªÀ¸·Î Ç¥Çö µÇ¾î¾ß Çϸç ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀÌ ½ÃÀÛµÉ ¶§ Çѹø¸¸ ÃʱâȰ¡ ÀÌ·ç¾î Áø´Ù. ¹Ý¸é¿¡ ÀÚµ¿º¯¼ö¿Í ·¹Áö½ºÅÍ º¯¼ö´Â
ÃʱâȵǴ °ªÀÌ »ó¼ö°¡ ¾Æ´Ï¾îµµ µÇ¸ç ´Ù¾çÇÑ Ç¥Çö½ÄÀÌ °¡´ÉÇÏ´Ù. ÀÚµ¿º¯¼ö¿Í ·¹Áö½ºÅÍ º¯¼ö´Â »ç¿ëÀÚÀÇ ÃëÇâ¿¡ ¸Â°Ô ¸í½ÃÀûÀ¸·Î ÃʱâȽÃÄÑ
ÁÖ´Â °ÍÀÌ ÁÁ´Ù.
Àç±Í(Recursion)
C ¾ð¾îÀÇ ÇÔ¼ö´Â Àç±Í(Recursion)ÀûÀ¸·Î
È£ÃâÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö
³»ºÎ¿¡¼ ÇØ´ç ÇÔ¼ö¸¦ ´Ù½Ã È£ÃâÇÒ ¼ö ÀÖ´Â ¹æ½ÄÀε¥ ¿¹Á¦¸¦ ÅëÇÏ¿© ÀÍÇô º¸µµ·Ï ÇÏÀÚ.
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: Àç±ÍÈ£Ãâ */ #include <stdio.h> void printd (int n) { if (n < 0) {
putchar('-');
n = -n; } if (n / 10)
printd(n / 10); putchar(n % 10 + '0'); } main () { printd (123); printf("\nPress
any key to end..."); getchar(); } |
(½ÇÇà °á°ú)
|
$ cc -o recur01 ch0410_recur01.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./recur01
©¬ ½ÇÇà 123 Press any key to end... |
¾Æ·¡ÀÇ ½Ç½À¿¹Á¦´Â Àç±ÍÈ£ÃâÀ» Àß È°¿ëÇϰí
ÀÖ´Â quick sort ÄÚµåÀÌ´Ù. ÀÌ ¾Ë°í¸®ÁòÀº 1962³â¿¡
¿µ±¹ÀÇ ÄÄÇ»ÅÍ °úÇÐÀÚ C.A.R.Hoare¿¡ ÀÇÇØ¼ °³¹ßµÇ¾ú´Ù.
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: Àç±ÍÈ£Ãâ(quicksort, a sorting algorithm developed by C.A.R.Hoare in 1962) */ #include <stdio.h> //swap: ¹è¿¿ä¼Òv[i]
¿Ív[j]ÀǰªÀ»¹Ù²Þ void swap (int v[], int i, int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } //qsort: ¹è¿¿ä¼Òv[left]¿¡¼v[right] »çÀÌÀǰªÀ»¿À¸§Â÷¼øÀ¸·ÎÁ¤·Ä void qsort(int v[], int left, int right) { int i, last; void swap(int v[], int i, int j); if (left >= right)
return; swap (v, left, (left
+ right)/2); last = left; for (i = left + 1; i <= right; i++) if
(v[i] < v[left])
swap (v, ++last, i); swap(v, left, last); qsort(v, left,
last-1); qsort(v, last+1,
right); } main () { int i; int v[] = {2, 9, 4, 7, 6, 7, 5, 8, 3, 1}; qsort (v, 0, 9); for (i = 0; i < 9; i++) printf("%d, ", v[i]); printf("%d", v[i]); } |
(½ÇÇà °á°ú)
|
$ cc -o recur02 ch0410_recur02.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./recur02
©¬ ½ÇÇà 1, 2, 3, 4, 5, 6, 7, 7, 8, 9 |
C¾ð¾î Àü󸮱â(Preprocessor)
C¾ð¾î´Â ÄÄÆÄÀϽà ¿ì¼±ÀûÀ¸·Î ó¸®ÇÏ´Â Àü󸮱⸦ Á¦°øÇÑ´Ù. ´ëÇ¥ÀûÀÎ °ÍÀ¸·Î #include¿Í #define, #if°¡ ÀÖ´Ù. #include´Â ÄÄÆÄÀϽà ÆÄÀÏÀÇ
³»¿ë¹°À» Æ÷ÇÔ ½ÃŰ´Â ¿ªÇÒÀ» Çϸç, #defineÀº ¹®ÀÚ¿À» Á¤ÀÇÇÏ¿© ġȯÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. #if´Â Á¶°ÇºÎ ÄÄÆÄÀÏÀ» Çϵµ·Ï
ÇØÁØ´Ù.
ÆÄÀÏ Æ÷ÇÔ±â(#include)
ÆÄÀÏÀÇ ³»¿ë¹°À» Æ÷ÇÔ ½ÃŰ´Â #include´Â ¾Æ·¡¿Í °°ÀÌ »ç¿ëÇÑ´Ù.
#include "filename"
ȤÀº
#include <filename>
Áï, filenameÀÇ ³»¿ëÀ» Æ÷ÇÔ½ÃŲ´Ù. ÆÄÀϸíÀ»
"filename" ó·³ ""À» »ç¿ëÇϸé ÇöÀç ¼Ò½º
ÇÁ·Î±×·¥ÀÌ ÀÖ´Â °÷¿¡¼ filenameÀ» ã¾Æ¼ ³»¿ëÀ» Æ÷ÇÔ½ÃŲ´Ù. ÆÄÀϸíÀ»
<filename>ó·³ <>À» »ç¿ëÇÏ¸é ÆÄÀÏÀÌ ±¸ÇöµÉ¶§ Á¤ÀÇµÈ °÷(¶óÀ̺귯¸®)¿¡¼ ÆÄÀÏÀ» ã¾Æ¼ ³»¿ëÀ» Æ÷ÇÔ½ÃŲ´Ù. #include´Â ÇÁ·Î±×·¥ÀÇ
±Ô¸ð°¡ Å©Áú¶§ º¯¼öµé°ú ÇÔ¼öµéÀÇ ¼±¾ðºÎ¸¦ Çì´õ ÆÄÀÏ·Î ´ÙÇÔ²² ¹¾î¼ Æ÷ÇÔ ½Ã۰í½Ã ÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù. ÀÌ·¸°Ô Çϸé ÇÁ·Î±×·¥ ¼Ò½ºÀÇ À¯Áöº¸¼ö ¹× °ü¸®°¡ ½¬¾îÁø´Ù.
¸ÅÅ©·Î ġȯ(#define)
#defineÀ» »ç¿ëÇÑ ¸ÅÅ©·Î ġȯÀÇ ¹®¹ýÀº ¾Æ·¡¿Í °°´Ù.
#define name replacement text
ÅäÅ« nameÀº replacement text·Î ġȯ(±³Ã¼,replacement)µÈ´Ù. replacement text´Â ¶óÀÎÀÇ ³¡±îÁö ±â¼úÇÒ ¼ö ÀÖ°í, ³Ê¹« ±æ´Ù¸é ¹é½½·¡½Ã ¹®ÀÚ(\)¸¦ ³¡¿¡ Ç¥½ÃÇÏ¿© °³Çà ÇÑÈÄ °è¼Ó
Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. nameÀ¸·Î
ġȯµÈ ¹®ÀåÀº ÄÄÆÄÀÏÀÌ µÇ¸é¼ Á¤Àǰ¡ ½ÃÀ۵Ǵ ½ÃÁ¡¿¡¼ ¼Ò½ºÆÄÀÏÀÇ ƒP±îÁö À¯È¿ÇÏ´Ù.
¿©·¯°¡Áö ¿¹Á¦¸¦ ÅëÇÏ¿© #defineÀ¸·Î ¸ÅÅ©·Î¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ» ÀÍÇôº¸ÀÚ.
#define forever for (;;)
À§ÀÇ ¹®ÀåÀº forever¶ó´Â nameÀ¸·Î ¹«ÇÑ·çÇÁ¸¦
Á¤ÀÇÇÑ´Ù. forever´Â for(;;)·Î ġȯµÇ¾î ¹«ÇÑ·çÇÁ¿Í °°Àº ¹®ÀåÀÌ µÈ´Ù. ¶ÇÇÑ ¾Æ·¡¿Í °°ÀÌ ¸Å°³Àμö(arguments)µéÀ»
Á¤ÀÇÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù.
#define max(A, B) ((A) > (B) ? (A) : (B))
ÇÔ¼öÈ£Ãâó·³ º¸ÀÏÁö ¸ð¸£³ª, max(A, B)´Â ÀζóÀÎ ÄÚµå·Î ġȯµÈ´Ù. ¿¹¸¦µé¸é,
x = max(p+q, r+s);
À§ÀÇ ¹®ÀåÀº
x = ((p+q) > (r+s) ? (p+q) : (r+s));
À¸·Î ġȯ(±³Ã¼)µÈ´Ù.
±×·¯³ª À̰ÍÀ» »ç¿ëÇÒ¶§ ¸î°¡Áö ÇÔÁ¤¿¡ ºüÁöÁö ¾Êµµ·Ï ÁÖÀÇÇÑ´Ù.
max(i++, j++); /* À߸øµÈ
»ç¿ë */
Áõ°¡¿¬»êÀÌ µÎ¹ø ¹ß»ýÇÑ´Ù.
#define square(x) x * x
À§ÀÇ ¸ÅÅ©·Î¸¦ square(z+1)¿Í °°ÀÌ È£ÃâÇÏ¸é ¿øÇÏÁö ¾Ê´Â °á°ú°¡ ³ª¿Ã ¼ö ÀÖ´Ù.
À§¿Í °°ÀÌ ¸î°¡Áö »çÇ×À» ÁÖÀÇÇϸé, ¸ÅÅ©·Î´Â ¾ÆÁÖ À¯¿ëÇÏ´Ù. <stdio.h>¿¡ ÀÖ´Â ÄÚµåµéÀ» º¸¸é, getchar ¿Í putchar ´Â ¸ÅÅ©·Î·Î Á¤ÀǵǾî ÀÖ¾î¼ ½ÇÇà(run-rime)½Ã ÇÔ¼öÈ£ÃúÀÇ ºÎÇÏ(overhead)¸¦ ÇÇÇÒ ¼ö ÀÖ´Ù. ¸ÅÅ©·Î¸¦ Á¤ÀÇÇÒ ¶§ ¹®ÀÚ¿À»
¸Å°³Àμö·Î ³Ñ°Ü¾ß ÇÏ´Â °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù.
À̶§ ¸Å°³Àμö¿¡ #¹®ÀÚ¸¦ ³ÖÀ¸¸é µÈ´Ù. ¿¹¸¦µé¸é,
#define dprint(expr) printf(#expr ¡° = %g\n¡±,
expr)
ÀÌ·¸°Ô ¸ÅÅ©·Î¸¦ Á¤ÀÇÇϰí,
dprint(x/y);
¸¦ È£ÃâÇϸé, ¾Æ·¡¿Í °°ÀÌ Ä¡È¯µÈ´Ù.
printf(¡°x/y¡± ¡° = &g\n¡±, x/y);
¹®ÀÚ¿ÀÌ ÇÕÃÄÁ®¼ °á±¹ ´ÙÀ½°ú °°ÀÌ µÈ´Ù.
printf(¡°x/y = &g\n¡±, x/y);
Àü󸮱⠿¬»êÀÚ ##Àº ¸ÅÅ©·Î°¡ È®Àå(ġȯ)µÉ¶§ ¸Å°³ÀÎÀÚµéÀ» ÇÕÄ¡´Âµ¥ »ç¿ëÇÑ´Ù. ¿¹¸¦µé¸é,
#define paste(front, back) front ## back
ÀÌ·¸°Ô Á¤ÀÇÇϸé, paste(name, 1) ´Â name1 ÅäÅ«À»
»ý¼ºÇÑ´Ù.
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: Àü󸮱â, ¸ÅÅ©·Îġȯ */ #include <stdio.h> #define max(A, B) ((A) > (B) ? (A) : (B)) #define square(x) x * x #define dprint(expr) printf(#expr " = %d\n", expr) #define paste(front, back) front ## back main () { int i, j, k; int ia=5, ib=10, iaib=0; i
= 3; j
= 7; k
= max (i++, j++); printf("i=%d, j=%d, k=%d\n", i, j, k); printf("square=%d, %d, %d\n", square(ia),
square(ia+1), square(ia+2)); dprint(max(ia,
ib)); printf("%d", paste(ia, ib)); printf("\nPress any key to end..."); getchar(); } |
(½ÇÇà °á°ú)
|
$ cc -o ch0411 ch0411_mac01.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./ch0411
©¬ ½ÇÇà i=4, j=9, k=8 square=25, 11, 17 max(ia, ib) = 10 0 Press any key to end... |
Á¶°ÇºÎ ÄÄÆÄÀÏ(#if)
ÇÁ·Î±×·¥ ¼Ò½º¸¦ ÄÄÆÄÀÏÇÏ´Â µ¿¾È¿¡ #if¸¦ ÅëÇÏ¿© ¹®ÀåµéÀ» Á¶°ÇÀûÀ¸·Î Æ÷ÇÔ½Ãų ¼ö ÀÖ´Ù. #if´Â »ó¼ö Á¤¼ö Ç¥Çö½ÄÀ»
Æò°¡ÇÑ´Ù(sizeof, Çüº¯È¯, enum »ó¼öµéÀº Æ÷ÇÔµÇÁö
¾ÊÀ½). ¸¸ÀÏ #if Ç¥Çö½ÄÀÌ zero°¡ ¾Æ´Ï¶ó¸é,
ÇÏÀ§ÀÇ ¶óÀÎÀÌ #endif ȤÀº #elif ȤÀº #else¸¦ ¸¸³¯¶§±îÁö Æ÷ÇԵȴÙ(#elif´Â else-if¿Í À¯»çÇÔ). ¸¸¾à nameÀÌ Á¤ÀÇ
µÇ¾î ÀÖ´Ù¸é, #if¿¡¼ defined(name)À¸·Î Ç¥ÇöµÇ´Â
³í¸® °á°ú°ªÀº 1À̰í, ±×·¸Áö ¾ÊÀº °æ¿ì´Â 0ÀÌ´Ù.
¿¹¸¦µé¸é, hdr.h Çì´õÆÄÀÏÀÇ ³»¿ëÀ» Çѹø¸¸ Æ÷ÇÔ½Ã۰íÀÚ ÇÑ´Ù¸é, ¾Æ·¡¿Í °°ÀÌ #if ¿Í
#endif »çÀÌ¿¡ ³»¿ëÀ» ÀÛ¼ºÇÑ´Ù.
#if !defined(HDR)
#define HDR
/* Çì´õÆÄÀÏ hdr.h ÀÇ ³»¿ëÀ» ¿©±â¿¡ ÀÛ¼º */
#endif
hdr.h Çì´õÆÄÀÏÀÌ Ã³À½À¸·Î Æ÷ÇÔ(include)µÉ¶§ HDRÀÌ Á¤ÀǵȴÙ. ±×ÀÌÈÄ¿¡ Æ÷ÇԵǴ °ÍµéÀº À̹Ì
HDRÀÌ Á¤ÀÇ µÇ¾î ÀÖ¾î #ifÀÇ Á¶°ÇÀ» ¸¸Á·ÇÏÁö ¾ÊÀ¸¹Ç·Î #endif ´ÙÀ½À¸·Î À̵¿(skip)ÇÏ°Ô µÈ´Ù. À§¿Í À¯»çÇÑ ¹æ½ÄÀ» »ç¿ëÇÏ¿©
ƯÁ¤ ÆÄÀÏÀÌ ¿©·¯°³ Æ÷ÇԵǴ °ÍÀ» ¹æÁöÇϰí, ƯÁ¤È¯°æ¿¡¼ ¿øÇÏ´Â Çì´õ ÆÄÀϸ¸ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. #if Á¶°ÇÀ» ¾Æ·¡¿Í °°ÀÌ ±¸¼ºÇϸé
ƯÁ¤ SYSTEM¿¡ ¸Â´Â Çì´õÆÄÀÏÀ» Áߺ¹¾øÀÌ µ¶¸³ÀûÀ¸·Î Æ÷ÇÔ½Ãų ¼ö ÀÖ´Ù.
#if SYSTEM == LINUX
#define
HDR ¡°linux.h¡±
#elif SYSTEM == BSD
#define
HDR ¡°bsd.h¡±
#elif SYSTEM == MSDOS
#define
HDR ¡°msdos.h¡±
#else
#define
HDR ¡°default.h¡±
#endif
#include HDR
¶ÇÇÑ, #ifdef ¿Í #ifndefÀº ¸íĪ(name)ÀÌ Á¤ÀǵǾî ÀÖ´ÂÁö ¿©ºÎ¸¦ ÆÇ´ÜÇÑ´Ù. #if¿¡ ´ëÇÑ À§ÀÇ Ã¹¹øÂ° ¿¹Á¦´Â ´ÙÀ½°ú °°ÀÌ ´Ù½Ã ÀÛ¼ºÇÒ ¼ö
ÀÖ´Ù.
#ifndef HDR
#define HDR
/* Çì´õÆÄÀÏ
hdr.h ÀÇ ³»¿ëÀ» ¿©±â¿¡ ÀÛ¼º */
#endif
(½Ç½À ¼Ò½º)
|
/* author: Jung,JaeJoon(rgbi3307@nate.com,
http://www.kernel.bz/) comments: Á¶°ÇÄÄÆÄÀÏ */ #include <stdio.h> #define SYSTEM LINUX #if SYSTEM == LINUX #define
HDR "linux.h" #elif SYSTEM == BSD #define HDR "bsd.h" #elif SYSTEM == MSDOS #define HDR "msdos.h" #else #define HDR
"default.h" #endif //#include HDR int main () { printf("%s", HDR); printf("\nPress any key to end..."); getchar(); return 0; } |
(½ÇÇà °á°ú)
|
$ cc -o ch0411 ch0411_mac02.c ©¬ ÄÄÆÄÀÏ ¹× ¸µÅ© $ ./ch0411
©¬ ½ÇÇà linux.h Press any key to end... |
¸ÎÀ½¸»
À̹ø ¿¬Àç¿¡¼´Â C¾ð¾î ÇÔ¼öÀÇ ±âÃÊ,
|
|
||
|
|
||
|
Á¦¸ñ: C¾ð¾î¿Í ¾Ë°í¸®Áò ¸ñÂ÷ |
ÀÌÆäÀÌÁö ÀúÀÛ±ÇÀº ÀúÀÚ¿¡°Ô ÀÖÀ½. |
|
|
ÀúÀÚ: |
ÃÖ±Ù¼öÁ¤ÀÏ:2011-02-20 |
|
|
|
|
|