ÀÌÀü ±Û¿¡¼ ¼Ò°³Çß´ø ±âÁØ¿¡ ¸ÂÃç C99¿¡ »õ·Î µµÀÔµÈ ±â¼úÀ» ÀÌ¾î¼ ¾Ë¾Æº¸ÀÚ. ¿©±â¼ ¼Ò°³ÇÏ´Â °Í ¿Ü¿¡µµ ´õ ¸¹Àº ³»¿ëÀÌ ÀÖÁö¸¸, Áß¿äÇÑ Ç׸ñ¸¸ ÀÚ¼¼È÷ ¾ð±ÞÇϵµ·Ï ÇϰڴÙ.
<wchar.h>¿Í <wctype.h>¸¦ ÅëÇÑ È®Àå ¹®ÀÚÀÇ Áö¿ø[Lib][Open]
<wchar.h>¿Í <wctype.h>´Â »ç½Ç C90ÀÇ È®ÀåÀÎ AMD1¿¡¼ Ãß°¡µÈ Ç¥ÁØ ¶óÀ̺귯¸®·Î C90 ¹ßÇ¥ ÀÌÀüºÎÅÍ ºñ¿µ¾î±Ç¿¡¼ Á¦±âµÆ´ø ´ëÇü ¹®Àڼ Áö¿øÀ» À§ÇØ Ãß°¡µÆ´Ù. È®Àå ¹®ÀÚ(wide character)¿Í Ç×»ó µû¶ó´Ù´Ï´Â ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¶ó´Â °³³äÀº ¹ÙÀÌÆ®/¹®ÀÚ Ãæµ¹(byte and character conflict)À» ÇØ°áÇϱâ À§ÇØ µµÀÔµÈ °³³äÀÌ´Ù.
ÄÄÇ»ÅÍ¿¡¼ ¿µ¹® ¾ËÆÄºª°ú ÀϺΠƯ¼ö ¹®ÀÚ¸¸À» »ç¿ëÇÏ´Â °æ¿ì, Ç¥ÁØÀÌ ÃÖ¼Ò 8ºñÆ® ÀÌ»óÀ¸·Î ±ÔÁ¤ÇÏ´Â ¹ÙÀÌÆ®¸¦ ÅëÇØ ¾Æ¹« ¹®Á¦¾øÀÌ ¸ðµç ¹®ÀÚ¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ºñ¿µ¾î±ÇÀÇ °æ¿ì¿¡´Â ÈξÀ ¸¹Àº ¼öÀÇ ±ÛÀÚ(ÇÑÀÚ¸¦ »ý°¢ÇØ º¸ÀÚ)¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÇÊ¿äÇϰí, °á±¹ ±×·± ȯ°æ¿¡¼ ¹®ÀÚ¸¦ Ç¥ÇöÇϱâ À§Çؼ´Â ¹ÙÀÌÆ®º¸´Ù ´õ Å« ÀúÀå ´ÜÀ§¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. Áï ÇϳªÀÇ ¹ÙÀÌÆ®°¡ °ð ÇϳªÀÇ ¹®ÀÚ¶ó´Â ÀüÅëÀûÀÎ °ø½ÄÀÌ ±úÁ³°í, À̸¦ ¹ÙÀÌÆ®/¹®ÀÚ Ãæµ¹À̶ó°í ºÎ¸¥´Ù.
¾ð±ÞÇßµíÀÌ C ¾ð¾î°¡ ÇʼöÀûÀ¸·Î ÇÊ¿ä·Î ÇÏ´Â ±âº» ¹®ÀÚ À̿ܿ¡ ¸¹Àº ¼öÀÇ ¹®ÀÚ¸¦ Ç¥ÇöÇÏ´Â °¡Àå Á÷°üÀûÀÎ ¹æ¹ýÀº ¹ÙÀÌÆ®º¸´Ù Å« ÀúÀå ´ÜÀ§¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ¹®Á¦´Â ÇÁ·Î±×·¥ ³»ºÎ¿¡¼´Â ÀÌ ¹æ¹ýÀÌ °¡´ÉÇÏÁö¸¸ ÇÁ·Î±×·¥ ¿ÜºÎ(¿¹¸¦ µé¸é, ÀúÀå ¸Åü)¿¡¼´Â ¿©ÀüÈ÷ ¹ÙÀÌÆ® Áß½ÉÀ̶ó´Â °ÍÀÌ´Ù. À̸¦ À§ÇØ ¹ÙÀÌÆ®º¸´Ù Å« ÀúÀå ´ÜÀ§¿¡ ÀúÀåµÇ¾î ÀÖ´Â È®Àå ¹®ÀÚ¸¦ ¹ÙÀÌÆ® ±â¹ÝÀÇ Ç¥ÇöÀ¸·Î º¯È¯(ÀÎÄÚµù)ÇØ³õÀº ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚÀÇ °³³äÀÌ »ý±ä´Ù. Áï, ¸¹Àº ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â ¹®ÀÚ¼ÂÀ» ´Ù·ç±â À§ÇØ ÇÁ·Î±×·¥ ³»ºÎ¿¡¼´Â È®Àå ¹®ÀÚ¸¦, ¿ÜºÎ¿¡¼´Â ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¸¦ »ç¿ëÇϸç, ÇÁ·Î±×·¥Àº ¿ÜºÎ·ÎºÎÅÍ ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ÀÔ·Â¹Þ¾Æ À̸¦ È®Àå ¹®ÀÚ·Î º¯È¯ÇØ ¿øÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÑ ÈÄ¿¡ ´Ù½Ã Ãâ·ÂÇÒ ¶§ ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ·Î º¯È¯ÇØ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.
 |
| <±×¸² 1> ¹ÙÀÌÆ®/¹®ÀÚ Ãæµ¹ |
´Ù¸¸ AMD1 ÀÌÀü¿¡´Â Ç¥ÁØÀÌ È®Àå ¹®ÀÚ(¿)¿Í ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ(¿) »çÀÌÀÇ º¯È¯ ±â´É¸¸À» <stdio.h>¸¦ ÅëÇØ Á¦°øÇ߱⠶§¹®¿¡, È®Àå ¹®ÀÚ(¿)·Î º¯È¯ÇÑ ÀÌÈÄÀÇ ÀÛ¾÷Àº ¸ðµÎ ÇÁ·Î±×·¥ÀÇ ÀÏÀ̾ú´Ù. AMD1¿¡¼´Â <wchar.h>¿Í <wctype.h>¸¦ ÅëÇØ ÇÁ·Î±×·¥ ³»¿¡¼ È®Àå ¹®ÀÚ(¿)¸¦ ±âÁ¸ÀÇ ´ÜÀÏ ¹ÙÀÌÆ® ¹®ÀÚ(¿)ó·³ ¼Õ½±°Ô ´Ù·ê ¼ö ÀÖ´Â ÆíÀǸ¦ Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½¿¡¼ ¿ÞÂÊ ÇÁ·Î±×·¥Àº ´ÜÀÏ ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ÀÔ·Â¹Þ¾Æ ±× ¼ö¸¦ ¼¼´Â ÀüÅëÀûÀÎ ÇÁ·Î±×·¥À̰í, ¿À¸¥ÂÊÀº µ¿ÀÏÇÑ ÀÛ¾÷À» ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ°¡ º¯È¯µÈ °á°úÀÎ È®Àå ¹®ÀÚ¿¡ ´ëÇØ¼ ¼öÇàÇÏ´Â °ÍÀÌ´Ù.
#include <stdio.h>
int main(void)
{
int n = 0;
while (getchar() != EOF)
n++;
printf("%d\n", n);
return 0;
}
-------------------------------
#include <stdio.h>
#include <wchar.h>
int main(void)
{
int n = 0;
while (getwchar() != WEOF)
n++;
wprintf(L"%d\n", n);
return 0;
}
ÀÌ ¿¹¿¡¼ º¼ ¼ö ÀÖµíÀÌ ÀüÅëÀûÀÎ ´ÜÀÏ ¹ÙÀÌÆ® ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â È®Àå ¹®ÀÚ ÇÔ¼ö¸¦ µµÀÔÇÒ ¶§ À§¿øÈ¸´Â º´·Ä¼º(parallelism)°ú °³¼±¼º(improvement)À» °í·ÁÇß´Ù. Áï, °¡±ÞÀû ±âÁ¸ÀÇ ÇüÅÂ¿Í À¯»çÇÏ°Ô ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖµÇ, ºÐ¸íÇÑ ¹®Á¦¸¦ ¾È°í ÀÖ´Â ÇÔ¼öµé¿¡ ´ëÇØ¼´Â óÀ½ È®Àå ¹®ÀÚ¿Í °ü·ÃµÈ ÇÔ¼ö¸¦ Ãß°¡ÇÏ´Â °ÍÀ̱⿡ ½ÃÀÛºÎÅÍ °ú°¨È÷ º¯È¸¦ Áشٴ ¿øÄ¢À̾ú´Ù. ´ÙÀ½Àº ÀÌ µÎ °¡Áö ±âÁØÀÌ Àû¿ëµÈ ¿¹¸¦ º¸¿©ÁØ´Ù(¸ðµç ¿¹¸¦ ³ª¿ÇÑ °ÍÀº ¾Æ´Ï´Ù).
¡ß º´·Ä¼ºÀÌ Àû¿ëµÈ °æ¿ì
char/wchar_t: ´ÜÀÏ ¹®ÀÚ¸¦ Ç¥ÇöÇϱâ À§ÇÑ µ¥ÀÌÅÍÇü
int/wint_t: EOF/WEOF¸¦ Ãß°¡·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÇü
isdigit()/isxdigit(): ¹®ÀÚ ºÐ·ù¸¦ À§ÇÑ ÇÔ¼ö
fgetc()/fgetwc(): ½ºÆ®¸²¿¡¼ ¹®ÀÚ¸¦ Àоî¿À±â À§ÇÑ ÇÔ¼ö
fprintf()/fwprintf(): ½ºÆ®¸²À¸·Î Çü½ÄÀ» °®Ãç Ãâ·ÂÇÏ´Â ÇÔ¼ö
¡ß °³¼±¼ºÀÌ Àû¿ëµÈ °æ¿ì
swprintf(): sprintf()¿Í´Â ´Þ¸® ¹öÆÛ ¿À¹ö·±(buffer overrun)À» ¹æÁö
wcstok(): strtok()¿Í´Â ´Þ¸® ³»ºÎ ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾ÊÀ½
¡ß È®Àå ¹®ÀÚ ¹öÀüÀÌ ¾ø´Â °æ¿ì(À§ÇèÇϰųª ºÒÇÊ¿äÇÑ °æ¿ì)
gets()/puts()/atof()/perror()
¡ß ´ÜÀÏ ¹ÙÀÌÆ® ¹öÀüÀÌ ¾ø´Â °æ¿ì(ÁÖ·Î ¹®ÀÚ º¯È¯ ÇÔ¼ö)
btowc()/mbrtowc()
¶Ç Çϳª, C90°ú´Â ´Þ¸® AMD1¿¡ Ãß°¡µÈ Èï¹Ì·Î¿î °³³äÀº ÀϹÝÈµÈ ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¶ó´Â °ÍÀÌ´Ù. C90Àº ³Î ¹®ÀÚ(null character)°¡ ´ÜÀÏ ¹ÙÀÌÆ® ¹®ÀÚ¿°ú ¸ÖƼ ¹ÙÀÌÆ® ¹®ÀÚ¿ ¸ðµÎ¿¡¼ ¹®ÀÚ¿ÀÇ ³¡À» Ç¥½ÃÇÏ´Â ¿ªÇÒÀ» Çϵµ·Ï Çϱâ À§ÇØ, ¶Ç Ãʱ⠺¯È¯ »óÅ¿¡¼´Â ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¿ ³»¿¡¼ C ¾ð¾îÀÇ ±âº» ¹®ÀÚ°¡ ¸ðµÎ º»·¡ÀÇ Àǹ̸¦ °®µµ·Ï Çϱâ À§ÇØ ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¿¡ ¾ö°ÝÇÑ Á¦ÇÑÀ» °¡Çß´Ù.
ÇÏÁö¸¸ ÀÌ·± Á¦ÇÑÀº ISO/IEC 10646À» ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ·Î »ç¿ëÇÏÁö ¸øÇϵµ·Ï ¸¸µç´Ù. ¿¹¸¦ µé¾î a´Â ISO/IEC 10646¿¡¼ \0\0\0a¿Í °°Àº Ç¥ÇöÀ» °®´Â´Ù. µû¶ó¼ ÆÄÀÏ¿¡ ÇÑÇØ¼¸¸ ±×·¯ÇÑ Á¦ÇÑÀ» ¿ÏÈÇÏ°í ¸ÖÆ¼¹ÙÀÌÆ® ¹®ÀÚ·Î ±¸¼ºµÈ ÆÄÀÏÀÇ ³»¿ëÀ» Àоî È®Àå ¹®ÀÚ·Î º¯È¯ÇØ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀϹÝÈµÈ ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¶ó´Â °³³äÀ» Ãß°¡Çß´Ù. ÁÖÀÇÇÒ Á¡Àº ÀϹÝÈµÈ ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ´Â ÇÁ·Î±×·¥ ¿ÜºÎ¿¡¼¸¸ Çã¿ëµÈ´Ù´Â »ç½ÇÀÌ´Ù. ÇÁ·Î±×·¥ ³»ºÎ¿¡¼ ´Ù·ç¾îÁö´Â ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚ¿¡´Â ¿©ÀüÈ÷ ¾ö°ÝÇÑ Á¦ÇÑÀÌ ±×´ë·Î Àû¿ëµÈ´Ù.
°¡º¯ ±æÀÌ ¹è¿[Lang][Open]
C¿¡¼ ¸ðµç ¹è¿Àº Á¤ÀûÀÎ Å©±â¸¦ °®´Â´Ù. Áï ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â ÀÌÀü¿¡ ¸ðµç ¹è¿ÀÇ Å©±â¸¦ ¹Ì¸® °áÁ¤ÇÒ ¼ö ÀÖµµ·Ï Á¤¼ö »ó¼ö¸¸ÀÌ ¹è¿ Å©±â¸¦ ¸í½ÃÇϱâ À§ÇØ ¾²ÀÏ ¼ö ÀÖ´Ù. °á±¹ µ¿ÀûÀÎ Å©±âÀÇ ¹è¿À» À§Çؼ´Â malloc()/free()¸¦ »ç¿ëÇØ¾ß Çß°í, ÀÌ·± ºÒÆíÀ» ÁÙÀ̱â À§ÇØ ´Ù¼öÀÇ ÄÄÆÄÀÏ·¯´Â È®ÀåÀ» ÅëÇØ º¸ÅëÀÇ ¹è¿ ¼±¾ð¿¡¼µµ Å©±â¸¦ µ¿ÀûÀ¸·Î ¸í½ÃÇÒ ¼ö ÀÖµµ·Ï Çã¶ôÇß¾ú´Ù. ÇÏÁö¸¸ ÀÌÁ¦ C99¸¦ ÅëÇØ Ç¥ÁØ C¿¡¼µµ °ø½ÄÀûÀ¸·Î °¡º¯ ±æÀ̸¦ °®´Â ¹è¿(VLA, variable length array) ¼±¾ðÀÌ Çã¶ôµÈ´Ù.
void foo(int size, int vla[*]);
int bar(void)
{
const int n = 10; // C¿¡¼´Â »ó¼ö°¡ ¾Æ´Ô
int m = 9;
int a[n], twodim[m][n];
size_t s = sizeof(a); // ½ÇÇà Áß¿¡ Æò°¡µÊ
/* ... */
}
void foo(int size, int vla[size])
{ /* .... */ }
ÀÌ ¿¹´Â VLA¸¦ ¼±¾ðÇÏ°í »ç¿ëÇÏ´Â ´Ù¾çÇÑ ¸ð½ÀÀ» º¸¿©ÁÖ°í ÀÖ´Ù. ƯÈ÷ µ¿ÀûÀÎ Å©±âÀÇ 2Â÷¿ø ¹è¿ÀÌ malloc()/free()¸¦ ÅëÇÑ µ¿Àû ¸Þ¸ð¸® ÇÒ´ç¿¡ ºñÇØ ¾ó¸¶³ª ½±°Ô ¼±¾ðµÉ ¼ö ÀÖ´ÂÁö ÁÖ¸ñÇÒ Çʿ䰡 ÀÖ´Ù. ¶ÇÇÑ ÁÖ¼®¿¡¼µµ ¹àÈ÷°í ÀÖÁö¸¸ ¿ø·¡ ¹ø¿ª½Ã¿¡ Æò°¡µÇ´Â sizeof ¿¬»êÀÚ°¡ VLA¿¡ Àû¿ëµÇ´Â °æ¿ì¿¡´Â ½ÇÇà Áß¿¡ Æò°¡µÈ´Ù´Â »ç½Çµµ Èï¹Ì·Ó´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.
i = 0;
int a1[i++]; // Æò°¡µÊ (i Áõ°¡)
int s1 = sizeof(i++); // Æò°¡µÇÁö ¾ÊÀ½
int s2 = sizeof(int [++i]); // Æò°¡µÊ (i Áõ°¡)
int s3 = sizeof(int (*)[++i]); // ¾Ë ¼ö ¾øÀ½
¿©±â¼ ¸¶Áö¸· ¿¹´Â ÄÄÆÄÀÏ·¯¿¡ µû¶ó ±× °á°ú°¡ ´Þ¶óÁüÀ» ÀǹÌÇÑ´Ù. VLAÀÇ Å©±â¿¡ µû¶ó Æ÷ÀÎÅÍÀÇ Å©±â°¡ ´Þ¶óÁö´Â ȯ°æ¿¡¼´Â ½ÇÇà Áß¿¡ Æò°¡µÇ¸ç, Ç×»ó Æ÷ÀÎÅÍ Å©±â°¡ °íÁ¤µÇ¾î Àִ ȯ°æ¿¡¼´Â ¹ø¿ª½Ã¿¡ Æò°¡µÉ ¼öµµ ÀÖ´Ù. ¸¶Áö¸·À¸·Î ±â¾ïÇÒ °ÍÀº gcc µîÀÇ ÄÄÆÄÀÏ·¯°¡ C99 ÀÌÀüºÎÅÍ È®ÀåÀ¸·Î Á¦°øÇÏ´ø °¡º¯ ±æÀÌ ¹è¿Àº »ó¼¼ÇÏ°Ô µé¿©´Ùº¸¸é C99¿¡¼ Á¦°øÇÏ´Â °Í°ú Â÷À̰¡ ÀÖ´Ù´Â »ç½ÇÀÌ´Ù. Áö¸éÀÇ Á¦ÇÑÀ¸·Î ´Ù·çÁö´Â ¸øÇÏÁö¸¸ ±× »ç½Ç¸¸Àº ²À ±â¾ïÇØµÎ±æ ¹Ù¶õ´Ù.
¸Å°³º¯¼ö ¹è¿ ¼±¾ðÀÌ static°ú Çü ÁöÁ¤ÀÚ[Lang][Open]
±âº»ÀûÀ¸·Î ¾Æ·¡ µÎ ¼±¾ðÀº (ÇÁ·Î±×·¥À» º¸´Â »ç¶÷¿¡°Ô´Â ÁÖ¼®Ã³·³ ¾î¶² Á¤º¸¸¦ ÁÙ ¼ö À־) ÄÄÆÄÀÏ·¯ÀÇ ÀÔÀå¿¡¼´Â µ¿ÀÏÇÑ ¼±¾ðÀÌ´Ù.
void func(int a[10]);
void func(int *a);
C99¿¡¼´Â ¸Å°³º¯¼ö¿¡¼ÀÇ ÀÌ ¹«ÀǹÌÇÑ ¹è¿ ¼±¾ðÀ» º¯ÇüÇÏ¿© ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Á¤º¸¸¦ Á¦°øÇϵµ·Ï Çß´Ù.
void func(int a[static 10], int b[static 10]);
ÀÌ ¼±¾ðÀº ÇÔ¼ö ¾È¿¡¼ µÎ Æ÷ÀÎÅÍ a, b°¡ ³Î Æ÷ÀÎÅÍ(null pointer)°¡ ¾Æ´Ï¸ç ÀÚ½ÅÀÌ °¡¸®Å°´Â ¹è¿¿¡¼ ÃÖ¼Ò 10°³ÀÇ ¿ä¼Ò¿¡´Â Á¢±ÙÇÔÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë¸°´Ù. ÄÄÆÄÀÏ·¯´Â ÀÌ·± Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î ·çÇÁ ¾ð·Ñ¸µ(loop unrolling) °°Àº ÃÖÀûȸ¦ ½±°Ô Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ´Â ¾îµð±îÁö³ª ÃÖÀûÈÀÇ ¹®Á¦À̱⠶§¹®¿¡ ÄÄÆÄÀÏ·¯°¡ ÇØ´ç ¼±¾ðÀÇ "static 10"À» ¹«½ÃÇØµµ ¹«¹æÇÏ´Ù.
¶Ç ´Ù¸¥ º¯È´Â ¸Å°³º¯¼ö ¼±¾ð½Ã Æ÷ÀÎÅÍ¿¡ Çü ÁöÁ¤ÀÚ¸¦ Àû¿ëÇÏ´Â °Í°ú °ü·ÃµÈ ¹®Á¦ÀÌ´Ù. Áö±Ý±îÁö Æ÷ÀÎÅÍÀÇ °ªÀÌ º¯ÇÏÁö ¸øÇÏ°Ô Çϱâ À§ÇØ const °°Àº Çü ÁöÁ¤ÀÚ¸¦ Àû¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì, ¸Å°³º¯¼ö ¼±¾ð¿¡ ¹è¿ ÇüÅÂÀÇ ¼±¾ðÀ» »ç¿ëÇÒ ¼ö ¾ø¾ú´Ù. ÇÏÁö¸¸ C99¿¡¼´Â ´ÙÀ½¿¡¼ º¸´Â °Íó·³ ¸Å°³º¯¼ö ¼±¾ð¿¡ ¹è¿ ¼±¾ðÀ» »ç¿ëÇØµµ Æ÷ÀÎÅÍ¿¡ Çü ÁöÁ¤ÀÚ¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¸¶·ÃÇØ ÁÖ¾ú´Ù.
void func(int b[const]);
void func(int * const b);
<tgmath.h>¸¦ ÅëÇÑ type-generic ¼öÇÐ ¸ÅÅ©·Î[Lib][Open]
<tgmath.h>´Â <math.h>¿¡¼ Á¦°øÇÏ´Â °¢Á¾ ¼öÇÐ ÇÔ¼öµéÀ» ¸ÅÅ©·Î·Î Á¦°øÇÑ´Ù. Â÷À̰¡ ÀÖ´Ù¸é <math.h>ÀÇ ¼öÇÐ ÇÔ¼öµéÀº ¸Å°³º¯¼ö¿Í ¹Ýȯ°ªÀÇ µ¥ÀÌÅÍÇü¿¡ µû¶ó ¼·Î ´Ù¸¥ ÇÔ¼ö¸íÀ¸·Î ±¸ºÐµÇ¾î ÀÖÁö¸¸ <tgmath.h>ÀÇ ¼öÇÐ ¸ÅÅ©·Î´Â ÁÖ¾îÁö´Â ÀÎÀÚÀÇ µ¥ÀÌÅÍÇü¿¡ µû¶ó ÇØ´çÇÏ´Â ¼öÇÐ ÇÔ¼ö·Î È®ÀåµÈ´Ù´Â °ÍÀÌ´Ù.
#include <tgmath.h>
float f = 3.14159;
result = sin(f);
¿¹¸¦ µé¾î ÀÌ¿Í °°Àº °æ¿ì, ¸ÅÅ©·Î sin()¿¡ ÀÇÇØ È£ÃâµÇ´Â ÇÔ¼ö´Â float ÇüÀÇ ÀÎÀÚ¿Í ¹Ýȯ°ªÀ» °®´Â sinf() ÇÔ¼ö°¡ µÈ´Ù. <tgmath.h>°¡ Á¦°øÇÏ´Â ÁÖ¿äÇÑ ÆíÀÇ´Â ÇÁ·Î±×·¥ Æ÷ÆÃ½Ã¿¡ ºûÀ» ¹ßÇÑ´Ù. ȯ°æÀÌ ¹Ù²î¾î È£ÃâÇÏ´Â ¼öÇÐ ÇÔ¼öÀÇ Á¾·ù¸¦ ¹Ù²Ù°íÀÚ ÇÏ´Â °æ¿ì(¿¹¸¦ µé¸é sinf()¿¡¼ sinl()·Î), <tgmath.h>¸¦ »ç¿ëÇϸé ÇÔ¼ö¸íÀÇ º¯È ¾øÀÌ ÁÖ¾îÁö´Â ÀÎÀÚ¿Í ¹Ýȯ°ªÀ» ÀúÀåÇÏ´Â ´ë»óüÀÇ µ¥ÀÌÅÍÇü¸¸ ÀûÀýÈ÷ ¹Ù²ãÁÖ¸é µÈ´Ù. »ç½Ç <tgmath.h>¸¦ º¸°í C++ÀÇ "intrinsic"À̳ª "overloading"À» ¶°¿Ã¸®´Â »ç¶÷µéÀÌ ÀÖÀ»Áöµµ ¸ð¸£°Ú´Ù. ÇÏÁö¸¸ À§¿øÈ¸´Â Æ÷Æ®¶õÀÇ "generic function"À» <tgmath.h>ÀÇ ¸ðµ¨·Î »ï¾Ò±â ¶§¹®¿¡ À̸§µµ type-generic ¼öÇÐ ¸ÅÅ©·Î°¡ µÆ´Ù.
UCN¿Í È®Àå ¸íĪ[Lang][Open]
C99ºÎÅÍ´Â C ¾ð¾î°¡ º»°ÝÀûÀ¸·Î ISO/IEC 10646À» Áö¿øÇϱ⠽ÃÀÛÇÑ´Ù. ÇÁ·Î±×·¥ ¼Ò½º ³»¿¡¼ ¹®ÀÚ¿ »ó¼öÀÇ È®Àå¿(escape sequence)°ú ºñ½ÁÇÑ ÇüÅÂ(\u ȤÀº \U·Î ½ÃÀÛ)·Î ISO/IEC 10646¿¡ Á¤ÀǵǾî ÀÖ´Â ¹®ÀÚ¸¦ ÁöÁ¤ÇØ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¶ôÇϰí ÀÖ´Ù. ¹°·Ð ¿Ü°ü»ó ÇüŰ¡ ¾Æ¸§´äÁö´Â ¾Ê±â¿¡ ÇÁ·Î±×·¥ ¼Ò½º ¾È¿¡¼ UCN(Universal Character Name)À» »ç¿ëÇØ ISO/IEC 10646ÀÇ ¹®ÀÚ¸¦ ¾²´Â »ç¶÷Àº ¾øÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ UCNÀÌ °®´Â Áß¿äÇÑ Àǹ̴ UCNÀÌ ¼·Î ´Ù¸¥ ÀÎÄÚµùÀ» »ç¿ëÇÏ´Â µÎ ȯ°æ »çÀÌ¿¡¼ ¸Å°³ ¿ªÇÒÀ» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
 |
| <±×¸² 2> UCNÀÇ ¿ªÇÒ |
È®Àå ¹®ÀÚ¼ÂÀ» À§ÇÑ ÀÎÄÚµù(A)¿Í ÀÎÄÚµù(B)°¡ ¼·Î ´Ù¸¦Áö¶óµµ, ÀÎÄÚµù(A)¸¦ »ç¿ëÇϴ ȯ°æ¿¡¼ C99 ÄÄÆÄÀÏ·¯°¡ ÇÁ·Î±×·¥À» Ãâ·ÂÇÒ ¶§ ºñÇ¥ÁØ ¹®ÀÚµéÀ» ¸ðµÎ UCNÀ¸·Î Ãâ·ÂÇØÁÖ°í, À̸¦ ÀÎÄÚµù(B)°¡ Àоî Áö¿øÇÏ´Â ¹®ÀÚµéÀ» UCN¿¡¼ º¯È¯ÇØÁÖ¸é ¼·Î ´Ù¸¥ ÀÎÄÚµùÀ» Áö¿øÇϴ ȯ°æÀÓ¿¡µµ Å« ¹®Á¦ ¾øÀÌ ºñÇ¥ÁØ ¹®ÀÚ¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥µéÀÌ À̽ļºÀ» °®´Â´Ù´Â »ç½ÇÀ» ¾Ë¼ö ÀÖ´Ù. ¹°·Ð À̸¦ À§Çؼ´Â °¢ °³¹ß ȯ°æÀÌ UCNÀ» ÃæºÐÈ÷ Áö¿øÇØÁÖ¾î¾ß ÇÑ´Ù.
¶ÇÇÑ UCN µµÀÔ°ú ´õºÒ¾î ±×µ¿¾ÈÀº Ç¥ÁØ ÀÔÀå¿¡¼´Â À߸øµÈ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ·¯°¡ Çã¶ôÇØÁÖ´Â ¹æ½ÄÀ¸·Î Áö¿øÇÏ´ø ¸íĪ¿¡ ¾²ÀÌ´Â ºñÇ¥ÁØ ¹®ÀÚµµ ÀÌÁ¦´Â Ç¥ÁØ¿¡ ÀÇÇØ Çã¶ôµÈ´Ù. Áï ÄÄÆÄÀÏ·¯°¡ Çã¶ôÇÑ´Ù¸é ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥µµ °¡´ÉÇØÁö´Â °ÍÀÌ´Ù.
typedef int ·¹ÄÚµå;
·¹ÄÚµå ÀüüÇÕ, ÇöÀç;
for (ÇöÀç = 0; ÇöÀç < ÀüüÇÕ; ÇöÀç++)
¹°·Ð ÀÌ¿Í °°Àº ÇÁ·Î±×·¥ÀÌ ¿ÏÀüÇÑ À̽ļºÀ» °®ÃßÁö´Â ¸øÇÏÁö¸¸, ÄÄÆÄÀÏ·¯°¡ UCNÀ» ÀûÀýÈ÷ Áö¿øÇØÁØ´Ù¸é °¡µ¶¼ºÀº ¶³¾îÁ®µµ À̽ļºÀ» °®Ãâ ¹æ¹ýÀÌ ¾ø´Â °ÍÀº ¾Æ´Ï´Ù.
16Áø ºÎµ¿ »ó¼ö[Lang][Lib][Open]
C ÇÁ·Î±×·¥¿¡¼ ºÎµ¿ »ó¼ö´Â Ç×»ó 10Áø¼ö ÇüÅ¿´Áö¸¸, ¿À·¡ ÀüºÎÅÍ ¸¹Àº ȯ°æÀÌ ºÎµ¿ ¼Ò¼ö Ç¥ÇöÀ» À§ÇØ ±â¼ö(radix)¸¦ 2·Î »ç¿ëÇØ ¿Ô´Ù. °á±¹ ±× Ç¥ÇöÀÇ ÇѰè·Î ÀÎÇØ 10Áø ºÎµ¿ »ó¼ö¸¦ »ç¿ëÇØ ºÎµ¿ ¼Ò¼ö Ç¥ÇöÀÇ °¡¼öºÎ(significand)¸¦ Ç×»ó Á¤È®È÷ ¸í½ÃÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø´ø ¼ÀÀ̾ú´Ù. C99¿¡¼´Â ±â¼ö°¡ 2 (ȤÀº 2n)ÀÎ ºÎµ¿ ¼Ò¼öÁ¡ Ç¥ÇöÀÇ °¡¼öºÎ¸¦ ´õ ¸íÈ®ÇÏ°Ô ±â¼úÇÒ ¼ö ÀÖµµ·Ï ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ 16Áø ºÎµ¿ »ó¼ö¸¦ Áö¿øÇÑ´Ù.
0x10ff0100p-8f
== 00010000111111110000000100000000(2) * 2-8
ÀÌ¿Í °°Àº 16Áø ºÎµ¿ »ó¼ö´Â ¿¹¸¦ µé¾î À̽ļºÀ» °®Ã߸ç
°°Àº Ç¥ÁØ ¶óÀ̺귯¸®¸¦ ±¸ÇöÇÒ ¶§ À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ´Ù. Ãß°¡·Î 16Áø ºÎµ¿ »ó¼ö¸¦ Ãâ·ÂÇÒ ¼ö ÀÖµµ·Ï printf() °è¿ ÇÔ¼ö¿¡´Â %a¿Í %A°¡ »õ·Î Ãß°¡µÆ´Ù.
º¹ÇÕ »ó¼ö[Lang][Open]
º¹ÇÕ »ó¼ö(compound literal)¶õ ÁýÇÕüÇü(¹è¿, ±¸Á¶Ã¼, °ø¿ëü)ÀÇ »ó¼ö¸¦ ÀǹÌÇÑ´Ù. Áö±Ý±îÁö´Â ¹®ÀÚ¿ »ó¼ö(¹®ÀÚÇüÀÇ ¹è¿·Î Ãë±ÞµÊ) °°Àº Ư¼öÇÑ °æ¿ì¸¦ Á¦¿ÜÇϸé, ÁýÇÕüÇüÀº ¸íĪÀÌ ºÙÁö ¾ÊÀº »ó¼ö¸¦ °®Áö ¸øÇß´Ù. ÇÏÁö¸¸ ÀÌÁ¦´Â º¹ÇÕ »ó¼ö°¡ ±× ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
void func(struct foo param);
func((struct foo) { 123, 3.14159 });
void func2(struct foo *p);
func2(&(struct foo) { 123, 3.14159 });
int *p = (int [3]) { 1, 2, 3 });
const int *a1 = (const int []) { 1, 2, 3 };
const int *a2 = (const int []) { 1, 2, 3 };
º¹ÇÕ »ó¼ö¿Í °ü·ÃµÈ ¸î¸î ±ÔÄ¢Àº ±î´Ù·Î¿ö¼ ¼³¸í¿¡ ¸¹Àº Áö¸éÀ» ÇÊ¿ä·Î ÇÑ´Ù. ¿©±â¼´Â ¸î °¡Áö Áß¿äÇÑ ±ÔÄ¢¸¸À» ÁöÀûÇØ º¸°Ú´Ù. ¿ì¼± ¡®literal¡¯À» ¡®»ó¼ö¡¯·Î ¹ø¿ªÇÏ´Â °ü·Ê ¶§¹®¿¡ ¹¯Èú ¼ö ÀÖ´Â »ç½ÇÀÌÁö¸¸, ¹®ÀÚ¿ »ó¼ö(string literal)°¡ ±×·¯ÇÏµí º¹ÇÕ »ó¼ö ¿ª½Ã ´ë»óü¿¡ ÇØ´çÇÑ´Ù. µû¶ó¼ Á¤¼ö »ó¼ö °°Àº ÁøÂ¥ »ó¼ö¿Í´Â ´Þ¸® ¸Þ¸ð¸®¿¡ Á¸ÀçÇÏ¸ç ¡®&¡¯ ¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ ÁÖ¼Ò¸¦ ÃëÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ¶ÇÇÑ º¹ÇÕ »ó¼öÀÇ µ¥ÀÌÅÍÇüÀÌ const·Î ÇÑÁ¤µÇ¾î ±× ³»¿ëÀÌ º¯ÇÏÁö ¾Ê´Â °æ¿ì °°Àº ³»¿ëÀÇ º¹ÇÕ »ó¼ö´Â °°Àº ¸Þ¸ð¸® °ø°£À» Â÷ÁöÇÒ ¼öµµ ÀÖ´Ù. Áï, ¿¹¿¡¼ Æ÷ÀÎÅÍ a1°ú a2°¡ °¡¸®Å°´Â ¸Þ¸ð¸® °ø°£ÀÌ µ¿ÀÏÇÒ ¼öµµ ÀÖ´Ù. ¶Ç Çϳª À¯ÀÇÇØ¾ß ÇÒ »çÇ×Àº º¹ÇÕ »ó¼ö°¡ ¸Þ¸ð¸®¸¦ Â÷ÁöÇϰí ÀÖ´Â ½Ã°£ÀÌ´Ù.
int i = 0, *p[3];
p[i] = (int [1]) { i++ };
p[i] = (int [1]) { i++ };
p[i] = (int [1]) { i++ };
------------------------------------
for (i = 0; i < 3; i++) {
p[i] = (int [1]) { i++ };
}
ÀÌ µÎ ¿¹ÀÇ ÇൿÀº ¿ÏÀüÈ÷ ´Ù¸£´Ù. ¿ìÃø¿¡¼ for ¹®¿¡ ÀÇÇØ {...}·Î ±¸¼ºµÈ ºí·ÏÀ» µå³ªµé ¶§¸¶´Ù º¹ÇÕ »ó¼ö´Â »ý¼ºµÆ´Ù°¡ »ç¶óÁö±â¸¦ ¹Ýº¹ÇÑ´Ù. °á±¹ ÇØ´ç ·çÇÁ°¡ Á¾·áµÇ¸é p[]ÀÇ °¢ Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ¸Þ¸ð¸® °ø°£Àº À¯È¿ÇÏÁö ¾ÊÀº °ø°£ÀÌ µÈ´Ù. Âü°í·Î º¹ÇÕ »ó¼ö´Â ÀÌÀü È£¿¡¼ ¼³¸íÇß´ø ÁöÁ¤µÈ ÃʱâÄ¡¸¦ ÅëÇØ ÇÁ·Î±×·¥À» ´õ °£´ÜÇϰí Á÷°üÀûÀ¸·Î ¸¸µé ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ µÎ ¿¹¸¦ ºñ±³Çغ¸ÀÚ.
struct timeval tv = { 0, n };
// ...
select(0, 0, 0, 0, &tv);
-------------------------------------------------------------------
select(0, 0, 0, 0, &(struct timeval) { .tv_usec = n });
_Pragma Àü󸮱⠿¬»êÀÚ[Lang][Open]
Àü󸮱â Áö½ÃÀÚÀÎ #pragma´Â ±âº»ÀûÀ¸·Î ÄÄÆÄÀÏ·¯°¡ È®ÀåÀ¸·Î Á¦°øÇÏ´Â ¿©·¯ ±â¼ú¿¡ Á¢±ÙÇÒ ¶§ »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ ÇÑ °¡Áö ¹®Á¦Á¡Àº #pragma Áö½ÃÀÚ¸¦ ´Ù¸¥ ¸ÅÅ©·Î¿Í ¼¯¾î »ç¿ëÇϱⰡ ¾î·Æ´Ù´Â °ÍÀÌ´Ù.
#define struct_pack(n) #pragma pack(n)
struct_pack(1)
¸ÅÅ©·Î°¡ È®ÀåµÈ °á°ú´Â Àü󸮱â Áö½ÃÀÚ ¿ªÇÒÀ» ÇÒ ¼ö ¾ø´Ù´Â ±ÔÄ¢¿¡ ÀÇÇØ ÀÌ ¿¹´Â Àǵµ´ë·Î ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù.
#if defined(A_COMPILER) /* A_COMPILER */
# define pack strict_pack
#else /* B_COMPILER */
# define pack __pack(1)
#endif
#pragma pack
ÀÌ °æ¿ì #pragma Áö½ÃÀÚ µÚÀÇ ¸ÅÅ©·Î°¡ È®ÀåµÈ´Ù´Â º¸ÀåÀÌ ¾ø¾î ¿ª½Ã³ª Àǵµ´ë·Î ÀÛµ¿ÇÒÁö ¹ÌÁö¼ö´Ù. ÀÌ·± ±Ùº»ÀûÀÎ ¹®Á¦ ÇØ°áÀ» À§ÇØ _Pragma Àü󸮱⠿¬»êÀÚ°¡ µîÀåÇß´Ù. ÀÛµ¿ ¿ø¸®´Â ´ÙÀ½ ¿¹¸¦ º¸¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
#define struct_pack(n) _Pragma("pack("#n")")
struct_pack(1) /* #pragma pack(1) */
#if defined(A_COMPILER) /* A_COMPILER */
# define pack "strict_pack"
#else /* B_COMPILER */
# define pack "__pack(1)"
#endif
_Pragma(pack) /* #pragma strict_pack ȤÀº #pragma __pack(1) */
ºÒ µ¥ÀÌÅÍÇüÀÇ Ãß°¡[Lang][Lib][Open]
C´Â ÀüÅëÀûÀ¸·Î 0 ȤÀº 0ÀÌ ¾Æ´Ñ °ªÀ¸·Î Âü/°ÅÁþÀ» Ç¥ÇöÇÏ¸ç º¸ÅëÀÇ Á¤¼öÇüÀ» »ç¿ëÇØ ¿Ô´Ù. ÀÌ·¯ÇÑ ÀüÅëÀº ±»°Ô ÀÚ¸®Àâ¾Æ ¿À¹¦ÇϰԵµ C ÇÁ·Î±×·¡¸ÓµéÀÇ ÀںνÉÀ¸·Î±îÁö À̾îÁö±âµµ ÇÏÁö¸¸, C99´Â C ¾ð¾î¿¡ ºÒ µ¥ÀÌÅÍÇü(boolean type)À» °ø½ÄÀûÀ¸·Î Ãß°¡Çß´Ù. ¸íĪ Ãæµ¹À» ÇÇÇϱâ À§ÇØ ºÒ µ¥ÀÌÅÍÇüÀº _BoolÀ̶ó´Â Çü ÁöÁ¤ÀÚ¸¦ °®´Â´Ù. _BoolÀº 0 ȤÀº 1¸¸À» ÀúÀåÇÒ ¼ö ÀÖ´Â ¹«ºÎÈ£ Á¤¼öÇüÀ¸·Î »ê¼úÇü°ú Æ÷ÀÎÅÍÇüÀ» _BoolÇüÀ¸·Î º¯È¯ÇÏ´Â °æ¿ì 0°ú ºñ±³ÇÑ °á°ú(0 ȤÀº 1)°¡ ³ª¿Â´Ù.
_Bool b, *pb;
b = 0; /* b = 0; */
b = -1; /* b = 1; */
pb = &b; /* pb´Â ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ô */
b = pb; /* µû¶ó¼ b = 1; */
b = (_Bool) 0.5; /* b = 1; */
¿¹¿¡¼ Æ÷ÀÎÅ͸¦ ´ëÀÔÇßÀ» ¶§ÀÇ °á°ú¿Í ºÎµ¿ »ó¼ö¸¦ ´ëÀÔÇßÀ» ¶§ÀÇ °á°ú¿¡ À¯ÀÇÇϱ⠹ٶõ´Ù. 0.5¸¦ _BoolÇüÀÌ ¾Æ´Ñ Á¤¼öÇüÀ¸·Î º¯È¯ÇÏ´Â °æ¿ì ¼Ò¼öÁ¡ ÀÌÇϸ¦ ÀÚ¸¥ ÈÄ¿¡ 0À» ´ëÀÔÇÏ°Ô µÈ´Ù. ÇÁ·Î±×·¡¸Ó°¡ ÇÁ·Î±×·¥¿¡ À̶ó´Â Çì´õ¸¦ ÷°¡ÇÏ´Â °æ¿ì, ´Ù¼Ò ±âÀÌÇÏ°Ô »ý±ä ¸íĪ _Bool°ú 0, 1À̶ó´Â °ª ´ë½Å boolÀ̶ó´Â ¸íΰú true, false¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
#include <stdbool.h>
bool b1, b2;
if (func1() && !func2())
b1 = true, b2 = false;
¹°·Ð bool, false, true¶ó´Â ¸íĪÀ» ´Ù¸¥ ¿ëµµ·Î ÀÌ¹Ì »ç¿ë ÁßÀÎ ÇÁ·Î±×·¥Àº ¸¦ ÷°¡ÇÏÁö ¾ÊÀ¸¸é »õ·Î Ãß°¡µÈ ºÒ µ¥ÀÌÅÍÇü¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.
__func__ ±âÁ¤ÀÇ ¸íĪ[Lang][Open]
ÇÁ·Î±×·¥À» µð¹ö±ëÇÏ´Â °úÁ¤¿¡¼ ºó¹øÇÏ°Ô ÇÊ¿äÇÑ ±â¼ú Áß Çϳª°¡ ÇöÀç ½ÇÇà ÁßÀÎ ÇÔ¼öÀÇ ¸íĪÀ» ¾ò´Â °ÍÀÌ´Ù. µð¹ö±ë ¸Þ½ÃÁö¿¡ ÇÔ¼öÀÇ ¸íĪÀ» Ãâ·ÂÇØ ¹®Á¦°¡ ÀÖ´Â ºÎºÐÀ» Á» ´õ ½±°Ô ã±â À§ÇؼÀÌ´Ù. ¸¹Àº ÄÄÆÄÀÏ·¯´Â À̸¦ À§ÇØ ÁÖ·Î ÇöÀç ½ÇÇà ÁßÀÎ ÇÔ¼ö¸íÀ¸·Î È®ÀåµÇ´Â ¸ÅÅ©·Î(gccÀÇ °æ¿ì __FUNCTION__)¸¦ Á¦°øÇϰí ÀÖÁö¸¸, C99´Â °°Àº ¸ñÀûÀ» À§ÇØ ¸ÅÅ©·Î¸íÀÌ ¾Æ´Ñ ±âÁ¤ÀÇ ¸íĪÀ» Á¦°øÇϰí ÀÖ´Ù. Áï, ÇÔ¼ö ½ÃÀÛÀ» ³ªÅ¸³»´Â { ÀÌÈÄ¿¡ ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ ¼±¾ðÀÌ Á¸ÀçÇÏ´Â °Íó·³ ÀÛµ¿ÇÑ´Ù.
static const char __func__[] = "ÇÔ¼ö¸í";
ÁÖÀÇÇÒ Á¡Àº __func__Àº ¸ÅÅ©·Î°¡ ¾Æ´Ï±â¿¡ ´ÙÀ½ÀÇ È®Àå °á°ú´Â ÀǵµÇÏÁö ¾ÊÀº "__func__"°¡ µÈ´Ù.
#define str(x) #x
#define xstr(x) str(x)
xstr(__func__);
C99 ÀÌÈÄÀÇ C ¾ð¾î
C Ç¥ÁØÈÀ§¿øÈ¸´Â C99¸¦ ¹ßÇ¥ÇÑ ÀÌÈÄ¿¡µµ C99¿Í °ü·ÃµÈ ¿©·¯ ¹®Á¦¸¦ °ËÅäÇÏ´Â ÀÛ¾÷À» ²ÙÁØÈ÷ ÁøÇàÇϰí ÀÖÀ¸¸ç, C90ÀÇ AMD1ó·³ C ¾ð¾îÀÇ ´É·ÂÀ» È®ÀåÇϱâ À§ÇØ Å©°Ô ¼¼ °¡Áö ÇüÅÂÀÇ ±â¼ú º¸°í¼(TR)¿¡ ´ëÇÑ ÀÛ¾÷À» ÁøÇà ÁßÀÌ´Ù.ù ¹øÂ°´Â C ¾ð¾î°¡ °¡Àå Å« Ȱ¾àÀ» º¸À̰í ÀÖ´Â ÀÓº£µðµå ºÐ¾ß¸¦ À§ÇÑ C ¾ð¾îÀÇ È®ÀåÀÌ´Ù. ÇöÀç ÀÓº£µðµå ºÐ¾ß¿¡¼ C ¾ð¾î°¡ º¸´Ù À̽ļºÀ» °®°í È¿À²ÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖµµ·Ï C ¾ð¾î¸¦ È®ÀåÇÏ´Â ÀÛ¾÷ÀÌ °ÅÀÇ ¸¶¹«¸® ÁßÀÌ´Ù(TR18037).
µÎ ¹øÂ°´Â C ¾ð¾î°¡ ISO/IEC 10646À» º¸´Ù Àû±ØÀûÀ¸·Î Áö¿øÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ ÀÛ¾÷ÀÌ´Ù. óÀ½ ¼Ò°³Çß´ø È®Àå ¹®ÀÚ³ª ¸ÖƼ¹ÙÀÌÆ® ¹®ÀÚÀÇ ÀϹÝÈµÈ °³³äÀ» ¶Ù¾î³Ñ¾î ´õ¿í ¸íÈ®ÇÑ ¹æ¹ýÀ¸·Î ISO/IEC 10646À» Áö¿øÇϱâ À§ÇØ »õ·Î¿î ¹®ÀÚÇüÀ» µµÀÔÇÏ´Â µîÀÇ È®ÀåÀ» ÁøÇàÇϰí ÀÖ´Ù(TR19769).
¸¶Áö¸·Àº ½ÊÁø ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê¿¡ ´ëÇÑ Áö¿øÀ» À§ÇÑ ÀÛ¾÷ÀÌ´Ù. ÀÌ¹Ì ¼³¸íÇßµíÀÌ ÀÏ¹Ý ÄÄÇ»ÅÍ¿¡¼´Â ÀÌÁø ºÎµ¿¼Ò¼öÁ¡ ¿¬»êÀÌ ´ë¼¼¸¦ ÀÌ·ç°í ÀÖÁö¸¸, ¾ÆÁ÷µµ Ư¼öÇÑ ºÐ¾ß¿¡¼´Â ½ÊÁø ºÎµ¿¼Ò¼öÁ¡ ¿¬»êÀ» »ç¿ëÇϰí ÀÖ´Ù. C ¾ð¾î´Â °ÑÀ¸·Î´Â ºÎÁ·ÇÔÀÌ ¾ø¾î º¸¿©µµ ½ÊÁø ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê Áö¿ø¿¡ ¸î¸î ½É°¢ÇÑ ¹®Á¦¸¦ ¾È°í ÀÖ´Ù. À̸¦ ÇØ°áÇϱâ À§ÇÑ È®ÀåÀÌ ÁøÇà ÁßÀÌ´Ù(TR24732).
ÀÌ·¸°Ô ÀÌ·ç¾îÁö´Â ÀÛ¾÷Àº ÃßÈÄ Ç¥ÁØÀÇ È®ÀåÀ̳ª »õ·Î¿î Ç¥ÁØ¿¡¼ ´Ù·ç´Â Çü½ÄÀ¸·Î ¿ì¸®µé¿¡°Ô ã¾Æ¿Ã °ÍÀÌ´Ù. ¶Ç Çϳª C ¾ð¾îÀÇ ¹Ì·¡¿¡ ´ëÇØ À̾߱âÇÒ ¶§ °Á¶ÇÏ°í ½ÍÀº ºÎºÐÀº C++¿ÍÀÇ °ü°èÀÌ´Ù. ÇöÀç C¿Í C++´Â ¼·Î ´Ù¸¥ À§¿øÈ¸¿¡ ÀÇÇØ Ç¥ÁØÈ°¡ ÁøÇà ÁßÀÌ´Ù.
µÎ ¾ð¾î°¡ »ó´çÈ÷ À¯»çÇÑ ºÎºÐÀ» ´ã°í ÀÖ°í ¼·Î ¿µÇâÀ» ÁÖ°í¹Þ´Â´Ù´Â »ç½ÇÀ» ºÎÀÎÇÒ ¼ö´Â ¾øÁö¸¸, µÎ ¾ð¾î°¡ ¼·Î ´Ù¸¥ »ç¿ëÀÚÃþ°ú »ç¿ë ȯ°æÀ» ¹ÙÅÁÀ¸·Î ¹ßÀüÇØ°¡°í Àֱ⠶§¹®¿¡ ½Ã°£ÀÌ Áö³¯¼ö·Ï µÎ ¾ð¾îÀÇ °øÅëÁ¡Àº ±×¾ß¸»·Î ¡°¿ª»çÀû ¿ì¿¬¼º¡±¿¡ ±âÀÎÇÑ °ÍÀ¸·Î º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. µû¶ó¼ µÎ ¾ð¾î Áß Çϳª°¡ ´Ù¸¥ ÇϳªÀÇ ´Ù¸¥ ¹öÀüÀ̶óµç°¡ ³ªÁß ¹öÀüÀ̶ó´Â ½ÄÀÇ ÇØ¼®Àº ±×¸® ÇÕ¸®ÀûÀ̶ó°í º¼ ¼ö ¾ø´Ù. ½Ã°£ÀÌ Áö³ª¸é Áö³¯¼ö·Ï µÎ ¾ð¾î¸¦ µ¶¸³µÈ ¾ð¾î·Î º¸´Â ½Ã°¢ÀÌ Áö¹èÀûÀÌ µÉ °ÍÀÌ´Ù.
º¯Çذ¡´Â C ¾ð¾î¸¦ À§ÇØ
ÀÌÁ¦ C99ÀÇ »õ ±â¼úÀ» ¼Ò°³ÇÏ´Â 3°³¿ù°£ÀÇ ¿©Á¤µµ ³¡³µ´Ù. ºÎÁ·ÇÑ ±Û ¼Ø¾¾·Î ÀÛÀº Áö¸é¿¡ ¸¹Àº ³»¿ëÀ» ´ã°íÀÚ ¾Ö¾²´Ùº¸´Ï ±×¸® Ä£ÀýÇÑ ±â»ç°¡ µÇÁö ¸øÇÑ °Í °°¾Æ ¾ÈŸ±î¿òÀÌ ¸¹ÀÌ ³²´Â´Ù. À̰÷¿¡¼ ´Ù·é ³»¿ëÀÌ C99ÀÇ ´Ù¾çÇÑ »õ ±â¼úÀ» öÀúÈ÷ ¼Ò°³Çϰí ÀÖÁö´Â ¸øÇÏÁö¸¸ ¾ÕÀ¸·Î º¯Çذ¡´Â C ¾ð¾îÀÇ ¸ð½ÀÀ» Á¢ÇÒ ¶§ Á¶±ÝÀÌ¶óµµ µµ¿òÀÌ µÇ±â¸¦ ¹Ù¶õ´Ù. ´Ã ±×·¸µí À̹ø ¿ø°í¿¡ ´ëÇÑ ¾î¶°ÇÑ ÁöÀûÀ̳ª Áú¹®, ±âŸ Àǰߵµ ȯ¿µÀ̸ç, ÇÊÀÚÀÇ ¸ÞÀÏÀ̳ª ȨÆäÀÌÁö °Ô½ÃÆÇÀ» ÅëÇØ ¾Ë·ÁÁÖ¸é ÀÚ¼¼ÇÑ ´äº¯À» µå¸± °ÍÀ» ¾à¼ÓÇÑ´Ù. Âü°í·Î ÀÌ ¿¬Àç´Â µÎ Â÷·Ê¿¡ °ÉÃÄ KLDP ¼¼¹Ì³ª¸¦ ÅëÇØ ¹ßÇ¥Çß´ø ³»¿ëÀ» º¸° Á¤¸®ÇÑ °ÍÀÌ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº http://doc.kldp.org/wiki.php/KLDPConf/20031011°ú http://doc.kldp.org/wiki.php/KLDPConf/20040118¿¡¼ ¸¸³¯ ¼ö ÀÖ´Ù. @
 | ¼Ò°³ÇÏÁö ¸øÇÑ C99ÀÇ »õ±â¼ú |  | |  | |
| ¿¬ÀçÀÇ Ã¹È¸ºÎÅÍ Áö±Ý±îÁö ¼Ò°³ÇÑ ±â¼ú À̿ܿ¡µµ C99´Â ´Ù¼öÀÇ »õ·Î¿î ±â¼úÀ» Á¦°øÇÏÁö¸¸ ºÎÁ·ÇÑ Áö¸éÀ¸·Î ³ª¸ÓÁö ±â¼úµéÀº °£´ÜÈ÷ ¾ð±Þ¸¸ÇÏ°í ³Ñ¾î°¡µµ·Ï ÇϰڴÙ. ¼¼¼¼ÇÑ ³»¿ëÀ» ¾ð±ÞÇϱ⺸´Ù´Â Àǵµ¿Í È帧À» ¤À» ¼ö ÀÖµµ·Ï ¼³¸íÇϰڴÙ.
¡ß ¿Í ¸¦ ÅëÇØ Á¦°øµÇ´Â È®Àå Á¤¼öÇü°ú ¶óÀ̺귯¸®[Lib]
ƯÁ¤ ºñÆ®¼ö¸¦ °®´Â Á¤¼öÇü, ÃÖ¼ÒÇÑ Æ¯Á¤ Å©±â¸¦ °®´Â Á¤¼öÇü µî ÄÄÆÄÀÏ·¯°¡ È®ÀåÀ¸·Î Á¦°øÇÏ´Â Á¤¼öÇüÀÌ Á¸ÀçÇÏ´Â °æ¿ì ÇÁ·Î±×·¥¿¡¼ À̽ļºÀ» ÀÒÁö ¾ÊÀ¸¸é¼ ½±°Ô Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ ±â¼úÀ» Á¦°øÇÑ´Ù.
¡ß Áº¯°ªÀ¸·Î Á¦ÇѵÇÁö ¾Ê´Â ¹è¿ÀÇ Æ÷ÀÎÅÍ·ÎÀÇ º¯È¯[Lang][Open][C++]
ÀÌ´Â C90 ÀÌÈÄ ¾ð¾î¿¡ Á¸ÀçÇÏ´Â ¹Ì¹¦ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÑ °ÍÀ¸·Î, ÇÔ¼ö°¡ ¹è¿À» ¸â¹ö·Î Æ÷ÇÔÇÏ´Â ±¸Á¶Ã¼ °ªÀ» ¹ÝȯÇÒ ¶§ Â÷À̸¦ º¸ÀÏ ¼ö ÀÖ´Â º¯ÈÀÌ´Ù.
¡ß ÀζóÀÎ ÇÔ¼ö Ãß°¡¿Í ¹Ýº¹¹® ¹× ¼±Åù®ÀÇ »õ·Î¿î ºí·° Åë¿ë ¹üÀ§[Lang][Open][C++]
C99´Â C++¿¡¼ »ç¿ëµÇ´ø °³³äÀÎ ÀζóÀÎ ÇÔ¼ö(inline function)¿Í for ¹®ÀÇ Ã¹ ¹øÂ° ¼ö½ÄÀÌ ¼ö½Ä»Ó ¾Æ´Ï¶ó ¼±¾ðÀÌ µÉ ¼ö ÀÖ´Â ±¸Á¶¸¦ ¹Þ¾Æµé¿´´Ù.
¡ß signed/unsigned long long intÇüÀÇ Ãß°¡[Lang][Lib][Open]
C99¿¡´Â ÃÖ¼Ò 64ºñÆ®ÀÇ Å©±â¸¦ °®´Â long long intÇüÀÌ Ãß°¡µÆ°í, ÀÌ¿Í ´õºÒ¾î Á¤¼ö »ó¼öÀÇ µ¥ÀÌÅÍÇüÀ» °áÁ¤ÇÏ´Â ±ÔÄ¢, Á¤¼ö Áø±Þ(integer promotion)°ú °ü·ÃµÈ ±ÔÄ¢¿¡µµ º¯È°¡ »ý°å´Ù. ¹°·Ð ¶óÀ̺귯¸® ÂÊ¿¡¼µµ long long int ÇüÀ» Áö¿øÇϱâ À§ÇÑ º¯È°¡ µÚµû¶ú´Ù.
¡ß enumÇüÀÇ ÃʱâÄ¡¿¡¼ ¿©ºÐÀÇ ½°Ç¥ Çã¶ô[Lang][Open]
C ¾ð¾î´Â »ç¶÷¿¡ ÀÇÇØ ÀÛ¼ºµÇ´Â ÇÁ·Î±×·¥»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÀÛ¼ºµÇ´Â C ÇÁ·Î±×·¥¿¡ ´ëÇØ¼µµ °í·ÁÇϰí ÀÖ´Ù. C99 ÀÌÀü¿¡´Â ÁýÇÕüÇüÀÇ ÃʱâÄ¡¿¡ ´ëÇØ¼¸¸ ¿©ºÐÀÇ ½°Ç¥¸¦ Çã¶ôÇßÀ¸³ª C99´Â ±ÕÇüÀ» ¸ÂÃß°í ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ´õ ½±°Ô C ÇÁ·Î±×·¥À» »ý¼ºÇÒ ¼ö ÀÖµµ·Ï ¿°ÅÇü¿¡ ´ëÇØ¼µµ ¿©ºÐÀÇ ½°Ç¥¸¦ Çã¶ôÇÑ´Ù.
¡ß IEEE 754 ¿¬»ê Áö¿ø°ú º¹¼Ò¼ö Áö¿ø, Ç¥ÁØ pragma Á¦°ø[Lang][Lib]
C90/C95´Â C ¾ð¾îÀÇ ºÎµ¿¼Ò¼öÁ¡ ¸ðµ¨À» ¸Å¿ì ³Ê±×·´°Ô Ç®¾îÁÖ´Â ¼öÁØ¿¡¼ ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê¿¡ ´ëÇÑ Áö¿øÀ» ¸ØÃèÀ¸³ª C99´Â ÇØ´ç ȯ°æÀÌ Áö¿øÇÏ´Â °æ¿ì IEEE 754 ¿¬»ê(IEC 559 ¿¬»ê)À» º¸´Ù Àß Áö¿øÇϰí ÀÖ´Ù. ¶ÇÇÑ ºÎµ¿¼Ò¼ö ȯ°æ¿¡ ´ëÇÑ Ãß°¡ÀûÀÎ Á¤º¸¿Í Á¢±ÙÀ» Çã¶ôÇϱâ À§ÇØ ¶ó´Â Çì´õ°¡ »õ·Î Ãß°¡µÆ°í, ±âÁ¸ÀÇ °¡ È®À嵯´Ù. ¶ÇÇÑ ÇÔ¼ö´Â ´Ù¾çÇÑ ¼öÇÐ ÇÔ¼ö¸¦ Ãß°¡·Î Á¦°øÇϸç, ¸¦ ÅëÇØ¼ º¹¼Ò¼ö¿¡ ´ëÇÑ Áö¿øµµ ¹ÞÀ» ¼ö ÀÖ´Ù. ºÎµ¿¼Ò¼ö ¿¬»ê¿¡ ´ëÇÑ Áö¿øÀÇ ÀϺκÐÀ¸·Î #pragma STDC...¿Í °°Àº ÇüŸ¦ ÅëÇØ »ç¿ëÇÒ ¼ö Àִ ǥÁØ pragmaµµ Á¦°øÇϰí ÀÖ´Ù.
¡ß Àü󸮱⠿¬»êÀ» intmax_t/uintmax_t·Î ¼öÇà[Lang][Open]
Àü󸮱⠿¬»êÀº ½ÇÇà ÁßÀÌ ¾Æ´Ñ ¹ø¿ª½Ã¿¡ ¼öÇàµÈ´Ù´Â Ư¡ÀÌ ÀÖ´Ù. C90¿¡¼´Â ¹ø¿ª ȯ°æ¿¡ ¸î °¡Áö Á¦¾àÀ» °¡ÇÏ¸é¼ ¹ø¿ª ȯ°æÀ» ±âÁØÀ¸·Î Àü󸮱⠿¬»êÀÌ ¼öÇàµÇµµ·Ï ±ÔÁ¤ÇßÀ¸³ª, C99¿¡¼´Â ½ÇÇà ȯ°æÀÇ °¡Àå Å« Á¤¼öÇüÀÎ intmax_t/uintmax_t¸¦ »ç¿ëÇØ ½ÇÇà ȯ°æÀ» Ư¼º¿¡ µû¶ó ¼öÇàµÇµµ·Ï ¿ä±¸Çϰí ÀÖ´Ù. ´Ü, ¾î¶°ÇÑ °æ¿ì¿¡µµ Àü󸮱⠿¬»êÀ» ÅëÇØ ½ÇÇà ȯ°æ¿¡ ´ëÇÑ °Ë»ç¸¦ ½ÃµµÇÏ´Â °ÍÀº À§ÇèÇÏ´Ù.
¡ß ±âÁ¤ÀÇ ¸ÅÅ©·Î Ãß°¡ Á¦°ø[Lang]
ȯ°æ¿¡ ´ëÇÑ ±¸ºÐÀ̳ª ÇØ´ç ȯ°æÀÌ Áö¿øÇÏ´Â ±â¼ú¿¡ ´ëÇÑ °Ë»ç¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï __STDC_HOSTED__, __STDC_IEC_559__, __STDC_IEC_559_COMPLEX__, __STDC_ISO_10646__ °°Àº Ãß°¡ÀûÀÎ ±âÁ¤ÀÇ ¸ÅÅ©·Î¸¦ Á¦°øÇϰí ÀÖ´Ù.
¡ß À̽ļº ÀÖ´Â Çì´õ¸í¿¡ ´ëÇÑ Á¦ÇÑ ¿ÏÈ[Lang][Open]
ÄÄÇ»ÆÃ ȯ°æÀÌ ´õ ³Ë³ËÇØÁ³±â¿¡ À̽ļºÀ» °®´Â Çì´õ¸í¿¡ ´ëÇÑ Á¦ÇÑÀÌ ¿ÏȵƴÙ. ¹°·Ð Ç¥ÁØÀº Áö±ØÈ÷ º¸¼öÀûÀΠŵµ¸¦ ÃëÇÒ Çʿ䰡 Àֱ⠶§¹®¿¡ ÀÌ Á¦ÇÑÀº ½ÇÁ¦ ´Ù¼öÀÇ È¯°æÀÌ Çã¶ôÇÏ´Â °Í¿¡ ºñÇϸé Áö±ØÈ÷ ¾ö°ÝÇÏ´Ù.
¡ß strftime() ÇÔ¼öÀÇ Ãß°¡ º¯È¯ ÁöÁ¤ÀÚ[Lib][Open]
³¯Â¥¿Í ½Ã°£ Ç¥Çö¿¡ ´ëÇÑ ±¹Á¦ Ç¥ÁØÀÎ ISO 8601À» Áö¿øÇϱâ À§ÇØ <time.h>À» ÅëÇØ Á¦°øµÇ´Â strftime() ÇÔ¼öÀÇ º¯È¯ ÁöÁ¤ÀÚ°¡ ´ëÆø Ãß°¡µÆ´Ù.
¡ß ¹ÙÀ̳ʸ® ÆÄÀÏÀÇ ½ÃÀÛ À§Ä¡¿¡¼ ungetc() È£Ãâ ±ÝÁö[Lib][Open]
¹ÙÀ̳ʸ® ÆÄÀÏÀÇ ½ÃÀÛ À§Ä¡¿¡¼ ó¸®µÈ ÀÔ·ÂÀ» µÇµ¹¸®±â À§ÇÑ ungetc() ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀÌ »ç½Ç»ó ±ÝÁöµÆ´Ù. C99¿¡¼ »ç¿ëÀ» ¾ïÁ¦ÇÑ ÈÄ¿¡ Â÷±â Ç¥ÁØ¿¡¼ ±ÝÁöÇÒ °èȹÀÌ´Ù.
¡ß <stdio.h>¿Í <wchar.h>¿¡ vscanf() °è¿ ÇÔ¼ö Ãß°¡[Lib][Open]
printf() °è¿°ú scanf() °è¿ ÇÔ¼öÀÇ Â÷À̸¦ ÁÙÀ̱â À§ÇØ vscanf() °è¿ ÇÔ¼ö¸¦ Ç¥ÁØ ¶óÀ̺귯¸®¿¡ Ãß°¡Çß´Ù. | | | | | |
| |
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.