9.1. C/C++

C ¹× C++ ÇÁ·Î±×·¥°ú °ü·ÃµÈ °¡Àå Ä¿´Ù¶õ º¸¾È ¹®Á¦ÁßÀÇ Çϳª´Â ¹öÆÛ ¿À¹öÇ÷οì·Î ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 5Àå À» º¸¶ó. C ´Â ¿¹¿Ü 󸮸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù´Â Ãß°¡ÀûÀÎ ¾àÁ¡À» °®°í Àִµ¥ ÀÌ´Â Áß´ëÇÑ ¿¡·¯ »óȲÀ» ¹«½ÃÇÏ´Â ÇÁ·Î±×·¥ ÀÛ¼ºÀ» ¿ëÀÌÇÏ°Ô ÇÑ´Ù.

C ¿Í C++ ¿¡¼­ ¹®ÀÚ Å¸ÀÔ ``char" Àº ÄÄÆÄÀÏ·¯¿Í ¸Ó½Å¿¡ µû¶ó signed ¶Ç´Â unsigned µÉ ¼ö ÀÖ´Ù ´Â°ÍÀº ÇÑ°¡Áö È¥¶õ½º·± ¹®Á¦ÀÌ´Ù. »óÀ§ ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Â signed char ÀÌ Á¤¼ö·Î ÀúÀåµÉ ¶§ °á°ú´Â À½¼öÀÏ °ÍÀε¥ ¾î¶² °æ¿ì ÀÌ´Â ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î 127 (0x71) º¸´Ù Å« °ªÀ» °¡Áú ¼öµµ ÀÖ´Â ¹®ÀÚ µ¥ÀÌŸ¸¦ ´Ù·ê¶§ ¹öÆÛ, Æ÷ÀÎÅÍ¿Í Ä³½ºÆ®¿¡ ´ëÇؼ­´Â char ¶Ç´Â signed char ´ë½Å ``unsigned char" ¸¦ »ç¿ëÇضó.

C ¿Í C++ Àº ŸÀÔ °Ë»ç Áö¿ø¿¡ ÀÖ¾î Á¤ÀÇ»ó »ó´çÈ÷ ¸ðÈ£ÇÏÁö¸¸ Äڵ忡¼­ ¸ðÈ£ÇÒ ÇÊ¿ä´Â ¾ø´Ù. °¡´ÉÇÑ ÇÑ ¸¹Àº ÄÄÆÄÀÏ·¯ °æ°í¸¦ ÄÑ°í Äڵ带 º¯°æÇؼ­ ÀÌ¿ÍÇÔ²² »õ·Ó°Ô ÄÄÆÄÀÏÇÏ¸ç ¸ðµç ÇÔ¼ö È£ÃâÀÌ Á¤È®ÇÑ Å¸ÀÔÀ» »ç¿ëÇÏ´Â Áö¸¦ º¸ÀåÇϱâ À§ÇØ º°µµÀÇ Çì´õ (.h) ÆÄÀÏ¿¡ ANSI ¿øÇüÀ» ¾ö°ÝÈ÷ »ç¿ëÇضó. gcc ¸¦ »ç¿ëÇÑ C ¶Ç´Â C++ ÄÄÆÄÀÏÀÇ °æ¿ì Àû¾îµµ ¸¹Àº °æ°í ¸Þ½ÃÁö¸¦ ÄÑ´Â ´ÙÀ½À» ÄÄÆÄÀÏ Ç÷¡±×·Î »ç¿ëÇØ ¸ðµç °æ°í¸¦ Á¦°ÅÇÏ·Á°í Çضó (¾î¶² °æ°í´Â ´õ¿í ³ôÀº ÃÖÀûÈ­ ¼öÁØ¿¡¼­ ¼öÇàµÇ´Â µ¥ÀÌŸ ÇÃ·Î¿ì ºÐ¼®¿¡ ÀÇÇؼ­¸¸ ŽÁöµÉ ¼ö Àֱ⠶§¹®¿¡ -O2 °¡ »ç¿ëµÊÀ» ÁÖ¸ñÇضó):
gcc -Wall -Wpointer-arith -Wstrict-prototypes -O2
¶ÇÇÑ "-W -pedantic" À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

¸¹Àº C/C++ ÄÄÆÄÀÏ·¯´Â ºÎÁ¤È®ÇÑ Æ÷¸Ë ¹®ÀÚ¿­µéÀ» ŽÁöÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î gcc ´Â ÇÔ¼ö¸¦ Ç¥½ÃÇϱâ À§ÇØ __attribute__() ±â´É (C È®Àå) À» »ç¿ëÇÑ´Ù¸é ÀÌ ÇÔ¼ö¿¡ ´ëÇÑ ºÎÁ¤È®ÇÑ Æ÷¸Ë ¹®ÀÚ¿­¿¡ ´ëÇØ °æ°í¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç Äڵ带 À̽ĺҰ¡´ÉÇÏ°Ô ¸¸µéÁö ¾Ê°í¼­µµ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Çì´õ (.h) ÆÄÀÏ¿¡ ÀÖ´Â ¿¹ÀÌ´Ù:
 /* in header.h */
 #ifndef __GNUC__
 #  define __attribute__(x) /*nothing*/
 #endif

 extern void logprintf(const char *format, ...)
    __attribute__((format(printf,1,2)));
 extern void logprintva(const char *format, va_list args)
    __attribute__((format(printf,1,0)));
"format" ¼Ó¼ºÀº "printf" ¶Ç´Â "scanf" ¸¦ ÃëÇÏ¸ç ¼ýÀÚµéÀº °¢°¢ Æ÷¸Ë ¹®ÀÚ¿­ÀÇ ¸Å°³º¯¼ö¿Í ù¹ø° variadic ¸Å°³º¯¼öÀÇ ¼öÀÌ´Ù. GNU docs ¿¡ À̵鿡 ´ëÇØ Àß ¼³¸íµÇ¾î ÀÖ´Ù. "noreturn" ¿Í "const" ¿Í °°Àº ´Ù¸¥ __attribute__ ±â´Éµéµµ ÀÖÀ½À» ÁÖ¸ñÇضó.

°¡´ÉÇÑ ¿­°ÅµÇ´Â °ªµéÀ» Á¤ÀÇÇϱâ À§ÇØ Æ¯º°ÇÑ °ªÀ» °®´Â ``char" ¶Ç´Â ``int" °¡ ¾Æ´Ñ ``enum" À» »ç¿ëÇضó. ÀÌ´Â ÄÄÆÄÀÏ·¯°¡ ¸ðµç ÇÕ¹ýÀûÀÎ °ªµéÀÌ ´Ù·ç¾îÁ³´ÂÁö °áÁ¤Çϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Â switch ¹®ÀÇ °ªµé¿¡ ´ëÇØ Æ¯È÷ À¯¿ëÇÏ´Ù.