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