next up previous contents
Next: ¹è¿­°ú Æ÷ÀÎÅÍ Up: C Programming FAQs Previous: Æ÷ÀÎÅÍ

³Î Æ÷ÀÎÅÍ(Null Pointers)

Q 5.1
¾Ç¸í³ôÀº `³Î Æ÷ÀÎÅÍ'¶õ °Ô µµ´ëü ¹º°¡¿ä?

A
¾ð¾î Á¤ÀÇ¿¡ ÀÇÇÏ¸é °¢°¢ÀÇ Æ÷ÀÎÅÍ Å¸ÀÔ¿¡ ´ëÇØ, Ưº°ÇÑ °ªÀÌ - ³Î(null) Æ÷ÀÎÅÍ - À־, ´Ù¸¥ Æ÷ÀÎÅÍ °ªµé°ú´Â ±¸º°µÇ¸ç, ¾î¶² ¿ÀºêÁ§Æ®³ª ÇÔ¼ö¸¦ °¡¸®Å°´Â Æ÷ÀÎÅͿʹ Ç×»ó ±¸º°µÇ´Â Æ÷ÀÎÅ͸¦ ¸»ÇÕ´Ï´Ù. Áï, ÁÖ¼Ò¸¦ ¸®ÅÏÇÏ´Â & ¿¬»êÀÚ´Â Àý´ë·Î ³Î Æ÷ÀÎÅ͸¦ ¸¸µé¾î ³¾ ¼ö ¾øÀ¸¸ç, ½ÇÆÐÇÏÁö ¾Ê´Â ÇÑ malloc() ÇÔ¼öµµ ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÏÁö ¾Ê½À´Ï´Ù (malloc()Àº ½ÇÆÐÇÒ °æ¿ì, ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÕ´Ï´Ù. ±×¸®°í ÀÌ °ÍÀÌ ³Î Æ÷ÀÎÅÍÀÇ ¾²ÀÓ»õ - ``ÇÒ´çµÇÁö ¾ÊÀº'' ¶Ç´Â ``¾î¶°ÇÑ °Íµµ °¡¸®Å°Áö ¾Ê´Â''À» ÀǹÌÇϴ Ưº°ÇÑ Æ÷ÀÎÅÍ·Î ¾²ÀÌ´Â °Í - Áß ÇϳªÀÔ´Ï´Ù.

³Î Æ÷ÀÎÅÍ¿Í ÃʱâÈ­µÇÁö ¾ÊÀº Æ÷ÀÎÅÍ5¿Í´Â °³³ä»ó ¿ÏÀüÈ÷ ´Ù¸¨´Ï´Ù. ³Î Æ÷ÀÎÅÍ´Â ¾î¶°ÇÑ ¿ÀºêÁ§Æ®³ª ÇÔ¼öµµ °¡¸®Å°Áö ¾Ê´Â Æ÷ÀÎÅÍÀ̰í, Ãʱâ¿ÍµÇÁö ¾Ê´Â Æ÷ÀÎÅÍ´Â ¾î¶² °ªÀ» °¡Áö´Â Áö ¸ð¸£¹Ç·Î, ¾Æ¹« ¿ÀºêÁ§Æ®³ª °¡¸®Å³ ¼ö ÀÖ´Â Æ÷ÀÎÅÍÀÔ´Ï´Ù. Áú¹® 1.30, 7.1, 7.31À» Âü°íÇϱ⠹ٶø´Ï´Ù.

À§¿¡¼­ ¼³¸íÇÑ °Íó·³, C ¾ð¾î´Â °¢°¢ÀÇ Æ÷ÀÎÅÍ Å¸ÀÔ¿¡ µû¶ó ³Î Æ÷ÀÎÅͰ¡ Á¸ÀçÇÕ´Ï´Ù. ±×¸®°í ³Î Æ÷ÀÎÅÍÀÇ ½ÇÁ¦ °ªÀº °¢ ŸÀÔ¿¡ µû¶ó ¼­·Î ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ÄÄÆÄÀÏ·¯°¡ °¢ ŸÀÔ¿¡ µû¸¥ ½ÇÁ¦ °ªÀ¸·Î º¯°æÇØ Áֱ⠶§¹®¿¡ ÇÁ·Î±×·¡¸ÓµéÀº °¢ ŸÀÔ¿¡ µû¶ó ¼­·Î ´Ù¸¥ ³Î Æ÷ÀÎÅÍÀÇ ³»ºÎÀûÀÎ °ªÀ» ¾Ë Çʿ䰡 ÀüÇô ¾ø½À´Ï´Ù (Áú¹® 5.2, 5.5, 5.6À» Âü°í).

Âü°í
K&R1 Sec. 5.4 pp. 97-8; K&R2 Sec. 5.4 p. 102; ISO Sec. 6.2.2.3; Rationale Sec. 3.2.2.3; H&S Sec. 5.3.2 pp. 121-3.

Q 5.2
ÇÁ·Î±×·¥¿¡¼­ ¾î¶»°Ô ³Î Æ÷ÀÎÅ͸¦ ¾²³ª¿ä?
A
¾ð¾î Á¤ÀÇ¿¡ µû¶ó, Æ÷ÀÎÅͰ¡ ¾²ÀÏ °÷(context)¿¡ »ó¼ö 0À» ¾²¸é ÄÄÆÄÀÏÇÒ ¶§ ÀÚµ¿À¸·Î ³Î Æ÷ÀÎÅÍ·Î º¯°æµË´Ï´Ù. Áï, ÃʱâÈ­³ª, ´ëÀÔ, ºñ±³ÇÒ ¶§, ÇÑÂÊÀÌ Æ÷ÀÎÅÍ Å¸ÀÔÀÇ º¯¼ö³ª ¼ö½ÄÀÏ °æ¿ì, ´Ù¸¥ ÂÊÀÇ 0Àº ÄÄÆÄÀÏ·¯°¡ ÀÚµ¿À¸·Î ³Î Æ÷ÀÎÅÍ·Î ¹Ù²Ù¾î Áشٴ ¶æÀÔ´Ï´Ù. ÄÄÆÄÀÏ·¯´Â ÀÌ »ó¼ö 0À» ½ÇÁ¦ ³Î Æ÷ÀÎÅÍ °ªÀ¸·Î ¹Ù²Ù¾î ÁÝ´Ï´Ù. µû¶ó¼­ ´ÙÀ½°ú °°Àº ÄÚµå´Â ¹®Á¦µÉ °Ô ÀüÇô ¾ø½À´Ï´Ù (Áú¹® 5.3 Âü°í):

    char *p = 0;
    if (p != 0)

±×·¯³ª, ÇÔ¼öÀÇ ÀÎÀÚ·Î Æ÷ÀÎÅ͸¦ Àü´ÞÇÒ °æ¿ì, ÀÎÀÚ°¡ Ç×»ó Æ÷ÀÎÅͰ¡ ¾²ÀÏ °÷(pointer context)À¸·Î ÀνĵÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. Áï, ÄÄÆÄÀÏ·¯°¡ 0À» ³Î Æ÷ÀÎÅÍ·Î ÀνÄÇÏÁö ¸øÇÒ °¡´É¼ºÀÌ ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. ÀÌ·² ¶§¿¡´Â ³Î Æ÷ÀÎÅͶó´Â °ÍÀ» °­Á¦ÀûÀ¸·Î ij½ºÆÃÀ» ½á¼­ ¾Ë·Á ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, UNIX ½Ã½ºÅÛ ÄÝÀÎ execlÀº °¡º¯ ÀÎÀÚ ¸®½ºÆ®6¸¦ ¹Þ½À´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÀÎÀÚÀÇ ³¡À» ¾Ë¸®±â À§Çؼ­ ³Î Æ÷ÀÎÅ͸¦ ¸¶Áö¸·À¸·Î Àü´ÞÇØ¾ß ÇÕ´Ï´Ù. Áï:

    execl("/bin/sh", "sh", "-c", "date", (char *)0);

¸¶Áö¸· ÀÎÀÚÀÇ (char *) ij½ºÆÃÀÌ »ý·«µÉ °æ¿ì, ÄÄÆÄÀÏ·¯´Â À̸¦ ³Î Æ÷ÀÎÅÍ·Î ÀνÄÇÏÁö ¸øÇÏ°í ´Ü¼øÈ÷ Á¤¼ö 0À¸·Î ÀνÄÇÕ´Ï´Ù. (´ëºÎºÐÀÇ UNIX ¸Å´º¾óÀº ÀÌ ºÎºÐÀ» À߸ø ¼³¸íÇϰí ÀÖÀ¸´Ï ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù.)

ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔ(prototype)ÀÌ ³ª¿Â °æ¿ì, ÀÎÀÚ Àü´ÞÀº ´ëÀÔ ¿¬»êÀ¸·Î ÀνĵDZ⠶§¹®¿¡, ´ëºÎºÐ ij½ºÆÃÀ» ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ¿Ö³ÄÇϸé ÇÔ¼ö ÇÁ·ÎÅäŸÀÔÀÌ ÄÄÆÄÀÏ·¯¿¡°Ô ÀûÀýÇÑ Å¸ÀÔÀÌ ¹«¾ùÀ̶ó´Â °ÍÀ» ¾Ë·ÁÁֱ⠶§¹®ÀÔ´Ï´Ù. µû¶ó¼­ ´Ü¼øÈ÷ 0¸¸ Àü´ÞÇØµµ, ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ ³Î Æ÷ÀÎÅÍ·Î ¹Ù²Ù¾î ÁÝ´Ï´Ù. ±×·¯³ª °¡º¯ ÀÎÀÚ ¸®½ºÆ®¸¦ ¾²´Â ÇÔ¼öÀÇ ÀÎÀÚ´Â ÇÁ·ÎÅäŸÀÔÀ» ¾Ë´õ¶óµµ, °¢°¢ÀÇ ÀÎÀÚ¿¡ ´ëÇÑ Å¸ÀÔÀ» ¾Ë ¼ö ¾øÀ¸¹Ç·Î ÀÌ·± ÇÔ¼öÀÇ ÀÎÀÚ·Î ¾²ÀÎ ³Î Æ÷ÀÎÅÍ¿¡´Â ¹Ýµå½Ã ij½ºÆÃÀ» ½á ÁÖ¾î¾ß ÇÕ´Ï´Ù. (Áú¹® 15.3À» Âü°íÇϽñ⠹ٶø´Ï´Ù.) ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔÀÌ ÀÖ´ø ¾ø´ø »ó°ü¾øÀÌ, ¹«Á¶°Ç ÇÔ¼ö ÀÎÀÚ·Î Àü´ÞµÇ´Â ³Î Æ÷ÀÎÅÍ¿¡ ij½ºÆÃÀ» ÇÏ´Â °ÍÀÌ È¥µ¿µÇÁö ¾Ê°í ¾ÈÀüÇÒ ¼ö ÀÖ½À´Ï´Ù.

±×³É 0À» ½áµµ ÁÁÀº °æ¿ì: ij½ºÆÃÀÌ ¹Ýµå½Ã ÇÊ¿äÇÑ °æ¿ì:
ÃʱâÈ­(initialization)  
´ëÀÔ(assignment)  
ºñ±³(comparison)  
ÇÔ¼ö È£Ãâ, ÇÁ·ÎÅäŸÀÔ ÀÖÀ½ (prototype in scope)
ÇÔ¼ö È£Ãâ, ÇÁ·ÎÅäŸÀÔ ¾øÀ½
(no prototype in scope)
°íÁ¤µÈ ÀÎÀÚ
ÇÔ¼ö È£Ãâ¿¡¼­ °¡º¯ ÀÎÀÚ
(variable argument) »ç¿ë

Âü°í
K&R1 Sec. A7.7 p. 190, Sec. A7.14 p. 192; K&R2 Sec. A7.10 p. 207, Sec. A7.17 p. 209; ISO Sec. 6.2.2.3; H&S Sec. 4.6.3 p. 95, Sec. 6.2.7 p. 171.

Q 5.3
Æ÷ÀÎÅͰ¡ ³Î Æ÷ÀÎÅÍÀÎÁö ºñ±³Çϱâ À§ÇØ ``if (p)''¶ó°í ¾²´Â °ÍÀÌ ¾ÈÀüÇѰ¡¿ä? ¸¸¾à ³Î Æ÷ÀÎÅÍÀÇ ½ÇÁ¦ °ªÀÌ 0ÀÌ ¾Æ´Ò °æ¿ì¿¡´Â ¾î¶»°Ô µÇ´Â °Ç°¡¿ä?
A
C ¾ð¾î¿¡¼­ ºÒ¸®¾ð(boolean) °ªÀÌ ÇÊ¿äÇÒ ¶§, °ÅÁþÀº 0À» ÀǹÌÇϸç, Âü(true)Àº 0ÀÌ ¾Æ´Ñ °ªÀ» ÀǹÌÇÏ°Ô µË´Ï´Ù. µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ ¾²°Ô µÇ¸é:
    if (expr)
½ÇÁ¦·Î `expr'ÀÌ ¹«¾ùÀ̵çÁö, ÄÄÆÄÀÏ·¯´Â À§ÀÇ Äڵ带 ´ÙÀ½ÀÇ ÄÚµå¿Í °°Àº °ÍÀ¸·Î º¾´Ï´Ù.
    if ((expr) != 0)
µû¶ó¼­ `expr'À» Áú¹®¿¡¼­ ÁÖ¾îÁø `p'·Î ¹Ù²Ù¸é, `if (p)'°¡ `if (p != 0)'ÀÌ µË´Ï´Ù. ±×¸®°í ÀÌ ¼ö½ÄÀº ºñ±³¸¦ ÇÏ´Â ¹®¸Æ(comparison context)À̱⠶§¹®¿¡, ÄÄÆÄÀÏ·¯´Â 0ÀÌ ³Î Æ÷ÀÎÅÍ »ó¼ö¶ó´Â °ÍÀ» ¾Ë°í, ½ÇÁ¦ ³Î Æ÷ÀÎÅÍ °ªÀ¸·Î º¯°æÇØÁÝ´Ï´Ù. µû¶ó¼­ ½ÇÁ¦ ³Î Æ÷ÀÎÅÍÀÇ °ªÀÌ 0ÀÎÁö ¾Æ´ÑÁö´Â ¾Ë Çʿ䰡 ÀüÇô ¾ø½À´Ï´Ù.

ºÒ¸®¾ð ºÎÁ¤(not) ¿¬»êÀÚÀÎ !´Â ´ÙÀ½°ú °°ÀÌ Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù:

		!expr	is essentially equivalent to	(expr)?0:1
			or to				((expr) == 0)
µû¶ó¼­ Áú¹®ÀÇ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÇØ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
		if(!p)	is equivalent to		if(p == 0)
±×·¯¹Ç·Î ´ÜÃàÇü(abbreviation)ÀÎ if (p)´Â ÀüÇô ¹®Á¦µÉ °ÍÀÌ ¾ø½À´Ï´Ù. ±×·¯³ª ¾î¶² »ç¶÷µéÀº ÀÌ·± ½ÄÀ¸·Î ÄÚµùÇÏ´Â °ÍÀÌ ³ª»Û ½À°üÀ̶ó°í ¸»ÇÕ´Ï´Ù (¹°·Ð ¾î¶² »ç¶÷µéÀº ÁÁÀº ½À°üÀ̶ó°í ¸»ÇÕ´Ï´Ù. Áú¹® 17.10À» Âü°íÇϱ⠹ٶø´Ï´Ù).

Áú¹® 9.2¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù.

Âü°í
K&R2 Sec. A7.4.7 p. 204; ISO Sec. 6.3.3.3, Sec. 6.3.9, Sec. 6.3.13, Sec. 6.3.14, Sec. 6.3.15, Sec. 6.6.4.1, Sec. 6.6.5; H&S Sec. 5.3.2 p. 122.

Q 5.4
±×·³ NULLÀº ¹«¾ùÀÌ°í ¾î¶»°Ô Á¤ÀǵǾî(#define) ÀÖ³ª¿ä?
A
½ºÅ¸ÀÏ¿¡ °üÇÑ ¹®Á¦ÀÌÁö¸¸, ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀº ÇÁ·Î±×·¥¿¡¼­ ¾Æ¿¹ 0À» ¾²Áö ¾Ê´Â °æÇâÀÌ ÀÖ½À´Ï´Ù. ÀÌ ¸ñÀûÀ¸·Î Àü󸮱â(preprocessor) ¸ÅÅ©·ÎÀÎ NULLÀ» ¾¹´Ï´Ù. ±×¸®°í ÀÌ ¸ÅÅ©·Î´Â 0À¸·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù (<stdio.h>¸¦ Æ÷ÇÔÇÑ ¿©·¯ Çì´õ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù). ¾î¶² °æ¿ì (void *)·Î ij½ºÆÃµÇ¾î ÀÖ´Â °æ¿ìµµ (Áú¹® 5.6 Âü°í) ÀÖ½À´Ï´Ù. µû¶ó¼­ Á¤¼ö 0°ú ³Î Æ÷ÀÎÅÍ »ó¼öÀÎ 0À» ½±°Ô ±¸º°Çϱâ À§ÇØ, ³Î Æ÷ÀÎÅͰ¡ ¿À´Â °÷¿¡ NULLÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.

NULLÀ» ¾²´Â °ÍÀº ´Ü¼øÈ÷ ½ºÅ¸ÀÏÀûÀÎ ¹®Á¦ÀÔ´Ï´Ù; Àü󸮱Ⱑ NULLÀ» 0À¸·Î ¹Ù²Ù¾îÁֹǷÎ, ÄÄÆÄÀÏ·¯°¡ º¼ ¶§¿¡´Â ¸ðµÎ 0À¸·Î º¸°Ô µË´Ï´Ù. µû¶ó¼­ ÇÔ¼ö ÀÎÀÚ·Î »ç¿ëÇÒ °æ¿ì¿¡´Â 0À» »ç¿ëÇÒ ¶§¿Í ¸¶Âù°¡Áö·Î NULLµµ ij½ºÆÃÀ» ÇØÁà¾ß ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

Áú¹® 5.2ÀÇ Ç¥¿¡¼­ 0 ´ë½Å¿¡ NULLÀ» ±×´ë·Î ¾µ ¼ö ÀÖ½À´Ï´Ù (ij½ºÆÃÇÏÁö ¾Ê´Â NULLÀº ij½ºÆÃÇÏÁö ¾Ê´Â 0°ú °°±â ¶§¹®ÀÔ´Ï´Ù).

±×·¯³ª NULLÀº ¹Ýµå½Ã Æ÷ÀÎÅͰ¡ ¾²ÀÌ´Â ¹®¸Æ¿¡¼­¸¸ ¾²¿©¾ß ÇÕ´Ï´Ù. Áú¹® 5.9¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù.

Âü°í
K&R1 Sec. 5.4 pp. 97-8; K&R2 Sec. 5.4 p. 102; ISO Sec. 7.1.6, Sec. 6.2.2.3; Rationale Sec. 4.1.5; H&S Sec. 5.3.2 p. 122, Sec. 11.1 p. 292.

Q 5.5
³Î Æ÷ÀÎÅÍ °ªÀ¸·Î 0ÀÌ ¾Æ´Ñ ºñÆ®¸¦ Æ÷ÇÔÇÏ´Â °ªÀ» »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡¼­´Â NULLÀÌ ¾î¶»°Ô Á¤ÀǵǾî ÀÖ³ª¿ä?

A
NULLÀº ÄÄÇ»ÅÍ¿¡ »ó°ü¾øÀÌ Ç×»ó 0À¸·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù (Áú¹® 5.4¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù).

ÇÁ·Î±×·¡¸Ó°¡ ³Î Æ÷ÀÎÅ͸¦ ¾µ °æ¿ì, 0À» ¾²´øÁö NULLÀ» ¾²´øÁö¿¡ »ó°ü¾øÀÌ, ½ÇÁ¦ ÄÄÇ»ÅÍÀÇ ³»ºÎÀûÀÎ ³Î Æ÷ÀÎÅÍ °ªÀ» ¸¸µé¾î³»´Â °ÍÀº ÄÄÆÄÀÏ·¯ÀÇ ¿ªÇÒÀÔ´Ï´Ù. µû¶ó¼­ ÄÄÇ»ÅÍ¿¡¼­ ³»ºÎÀûÀ¸·Î Ç¥ÇöµÇ´Â ³Î Æ÷ÀÎÅÍ °ªÀÌ 0ÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀÌ´õ¶óµµ NULLÀº ¹«Á¶°Ç 0À¸·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù. Áï ÄÄÆÄÀÏ·¯´Â Æ÷ÀÎÅÍ ¹®¸Æ¿¡ ¾²ÀÎ 0Àº ÀÚµ¿À¸·Î ³Î Æ÷ÀÎÅÍ °ªÀ¸·Î º¯°æÇØ ÁÝ´Ï´Ù. Áú¹® 5.2, 5.10, 5.17À» Âü°íÇϱ⠹ٶø´Ï´Ù.

Âü°í
ISO Sec. 7.1.6; Rationale Sec. 4.1.5.

Q 5.6
NULLÀÌ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù¸é:
    #define NULL        ((char *)0)

ÇÔ¼ö ÀÎÀÚ·Î NULLÀ» Àü´ÞÇÒ ¶§, ij½ºÆÃÇÏÁö ¾Ê¾Æµµ µÇÁö ¾ÊÀ»±î¿ä?

A
ÀϹÝÀûÀ¸·Î ±×·¸Áö ¾Ê½À´Ï´Ù. ¾î¶² ÄÄÇ»Å͵éÀº °¢°¢ ´Ù¸¥ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÇ ³»ºÎ Ç¥Çö ¹æ¹ýÀÌ ´Ù¸¨´Ï´Ù. µû¶ó¼­ ¹®ÀÚ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅͰ¡ ÇÊ¿äÇÑ °÷¿¡ NULLÀ» ±×³É ¾²´Â °ÍÀº ¹®Á¦°¡ ¾øÀ¸³ª, ´Ù¸¥ ŸÀÔÀ» °¡¸®Å°´Â Æ÷ÀÎÅͰ¡ ÇÊ¿äÇÑ °÷¿¡ ±×³É ¾²´Â °ÍÀº ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­ ¹®Á¦°¡ ¾ø´Ù°í »ý°¢µÇ´Â ´ÙÀ½ Äڵ嵵 ºÒ¾ÈÇÏ´Ù´Â °ÍÀÔ´Ï´Ù:

    FILE *fp = NULL;

±×·¯³ª ANSI C´Â NULLÀ» ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÏ´Â °ÍÀ» Çã¶ôÇϰí ÀÖ½À´Ï´Ù:

    #define NULL ((void *)0)

±×·¯³ª NULLÀ» À§¿Í °°ÀÌ Á¤ÀÇÇÏ´Â °ÍÀº (homonegeous pointer¸¦ ¾²´Â ÄÄÇ»ÅÍ¿¡¼­¸¸ µµ¿òÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù¸¸) NULLÀ» À߸ø¾²´Â ¹®Á¦¸¦ ¾î´À Á¤µµ ÇØ°áÇØ ÁÙ ¼ö ÀÖ½À´Ï´Ù (¿¹¸¦ µé¾î ASCII NUL ¹®ÀÚ°¡ ¿Í¾ß ÇÏ´Â °÷¿¡ NULLÀ» ¾²´Â °æ¿ì; Áú¹® 5.9 Âü°í).

Âü°í
Rationale Sec. 4.1.5.

Q 5.9
NULL°ú 0ÀÌ ³Î Æ÷ÀÎÅÍ »ó¼ö·Î¼­ ¿ÏÀüÈ÷ °°´Ù¸é µµ´ëü ¾î¶² °ÍÀ» ½á¾ßÇÏ´Â °ÅÁÒ?

A
´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀº Æ÷ÀÎÅÍ ¹®¸Æ¿¡¼­´Â ¹Ýµå½Ã NULLÀ» ½á¾ßÇÏ´Â °ÍÀ¸·Î ¹Ï°í ÀÖ½À´Ï´Ù. ´Ù¸¥ »ç¶÷µéÀº NULLÀ̶ó´Â ¸ÅÅ©·Î·Î 0À» °¡¸®´Â °ÍÀÌ ¿ÀÈ÷·Á ´õ È¥µ¿À» °¡Á®¿Â´Ù°í »ý°¢ÇÏ°í ¹«Á¶°Ç 0À» ¾²´Â °ÍÀ» ¼±È£Çϱ⵵ ÇÕ´Ï´Ù. ±×·¸Áö¸¸ ÀÌ Áú¹®¿¡´Â ¾î¶°ÇÑ °Íµµ ¿ÏÀüÇÑ ÇØ´äÀÌ µÇÁö ¸øÇÕ´Ï´Ù. (Áú¹® 9.2¿Í 17.10À» Âü°íÇϱ⠹ٶ÷) C ÇÁ·Î±×·¡¸Ó¶ó¸é Æ÷ÀÎÅÍ ¹®¸Æ¿¡¼­ NULL°ú 0À» ¸¶À½´ë·Î ¾µ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ±×¸®°í ´ÜÁö 0¸¸À» ¾²´Â °Íµµ ¿Ïº®ÇÏ´Ù´Â °Íµµ ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. (0Çϰí´Â ´Þ¸®) Æ÷ÀÎÅͰ¡ ¿Ã ¼ö ÀÖ´Â °÷À̸é, NULLÀ» ¾²´Â °ÍÀº ÁÁ½À´Ï´Ù. ±×·¯³ª ÇÁ·Î±×·¡¸Ó°¡ (NULLÀ» 0°ú ´Ù¸¥ °ÍÀ¸·Î ÀÌÇØÇϰųª ÄÄÆÄÀÏ·¯¿¡¼­ Ưº°ÇÏ°Ô Ãë±ÞÇÑ´Ù°í »ý°¢ÇÏ´Â µî) Æ÷ÀÎÅÍ 0°ú Á¤¼ö 0À» ±¸º°Çϴµ¥ NULLÀ» ½è´À³Ä¿¡ ÀÇÁ¸ÇÏ´Â °ÍÀº ÁÁÁö ¾Ê½À´Ï´Ù.

´Ù¸¥ Á¾·ùÀÇ 0ÀÌ ÇÊ¿äÇÑ °÷¿¡´Â ¸¸¾à ±×°Ô Á¦´ë·Î µ¿ÀÛÇÑ´Ù ÇÒÁö¶óµµ NULLÀ» ¾²¸é ¾ÈµË´Ï´Ù. ¿Ö³ÄÇÏ¸é ±×·² °æ¿ì, À߸øµÈ ½ºÅ¸ÀÏ¿¡ °üÇÑ ¸Þ½ÃÁö°¡ ¹ß»ýÇϱ⠶§¹®ÀÔ´Ï´Ù. (°Ô´Ù°¡ ANSI´Â NULLÀ» ((void *)0)À¸·Î Á¤ÀÇÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖÀ¸¹Ç·Î), Æ÷ÀÎÅͰ¡ ¾²ÀÏ ¼ö ÀÖ´Â ¸ðµç °÷¿¡ NULLÀ» ¾µ ¼ö ÀÖ´Â °Íµµ ¾Æ´Õ´Ï´Ù. ƯÈ÷ ASCII null ¹®ÀÚ (NUL)ÀÌ ¾²ÀÏ °÷¿¡ NULLÀ» ¾²¸é ¾ÈµË´Ï´Ù. ²À ¸ÅÅ©·Î¸¦ ½á¾ß ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ µû·Î Á¤ÀÇÇØ¼­ ¾²´Â °ÍÀÌ ´õ ³´½À´Ï´Ù:

    #define NUL '\0'

Âü°í
K&R1 Sec. 5.4 pp. 97-8; K&R2 Sec. 5.4 p. 102.

Q 5.10
±×·¸Áö¸¸ NULLÀÇ °ªÀÌ (0ÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀ¸·Î) º¯°æµÉ ¶§¸¦ (³»ºÎÀûÀ¸·Î 0ÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀ» ¾²´Â ÄÄÇ»ÅÍ) ´ëºñÇØ¼­ 0 ´ë½Å¿¡ NULLÀ» ¾²´Â °ÍÀÌ ´õ ÁÁÁö ¾ÊÀ»±î¿ä?
A
¾Æ´Õ´Ï´Ù. (NULLÀ» ¾²´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÒ ¼ö ÀÖÁö¸¸, ÀÌ·± ÀÌÀ¯¿¡¼­°¡ ¾Æ´Õ´Ï´Ù.) ÀϹÝÀûÀ¸·Î ½Éº¼¸¯(symbolic) »ó¼ö°¡ ¾²ÀÌ´Â °ÍÀº, ½ÇÁ¦ °ªÀÌ º¯°æµÉ °æ¿ì¸¦ ´ëºñÇØ¼­ ¾²´Â °æ¿ì°¡ ¸¹Áö¸¸, 0ÀÇ ÀÚ¸®¿¡ NULLÀÌ ¾²ÀÌ´Â °ÍÀº ÀÌ·± ÀÌÀ¯¿¡¼­°¡ ¾Æ´Õ´Ï´Ù. ´Ù½Ã ¸»ÇÏÁö¸¸ ¾ð¾î ÀÚü°¡ (Æ÷ÀÎÅÍ ¹®¸Æ¿¡¼­) 0ÀÌ ³Î Æ÷ÀÎÅ͸¦ ¸¸µé¾î ³½´Ù°í Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù. NULLÀ» ¾²´Â °ÍÀº ´Ü¼øÈ÷ ½ºÅ¸ÀÏ¿¡ °üÇÑ ¹®Á¦ÀÔ´Ï´Ù. Áú¹® 5.5, 9.2¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù.

Q 5.12
´ÙÀ½°ú °°Àº ¸ÅÅ©·Î¸¦ ½á¼­ ³Î Æ÷ÀÎÅͰ¡ ÀûÀýÇÑ Å¸ÀÔÀÌ µÇµµ·Ï Çϰí ÀÖ½À´Ï´Ù:
    #define Nullptr(type) (type *)0
ÀÌ°Ô ÁÁÀº ½À°üÀϱî¿ä?

A
ÀÌ Æ®¸¯Àº ¸Å¿ì ÀαâÀÖ°í ¸Å·ÂÀûÀ̱ä ÇÏÁö¸¸, Å©°Ô µµ¿òÀÌ µÇÁö ¾Ê½À´Ï´Ù. ÀÌ ¹æ¹ýÀº ´ëÀÔÀ̳ª ºñ±³¿¡¼­ ¾µ ¼ö ¾ø½À´Ï´Ù. Áú¹® 5.2¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù. (°Ô´Ù°¡ Ãß°¡ÀûÀ¸·Î ŸÀÌÇÎÇØ¾ß ÇÏ´Â ¼ö°í°¡ ÇÊ¿äÇÕ´Ï´Ù.) Áú¹® 9.1°ú 10.2µµ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

Q 5.13
¾à°£ Çò°¥¸³´Ï´Ù. NULLÀº 0ÀÎ °ÍÀÌ º¸ÀåµÇ¾î ÀÖ°í, ³Î Æ÷ÀÎÅÍ´Â ¾Æ´Ï¶ó°í ÇÑ °Í °°Àºµ¥ ¸Â½À´Ï±î?

A
ÀϹÝÀûÀ¸·Î ``null''°ú ``NULL''ÀÌ È¥¿ëµÇ¾î ¾²À̱ä ÇÏÁö¸¸ ´ÙÀ½ »çÇ×Àº ¾Ë¾ÆµÎ¼Å¾ß ÇÕ´Ï´Ù:

1.
³Î(null) Æ÷ÀÎÅÍ¿¡ ´ëÇÑ °³³äÀº Áú¹® 5.1¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.
2.
³Î Æ÷ÀÎÅͰ¡ ½ÇÁ¦·Î °®°Ô µÇ´Â ³»ºÎÀûÀÎ °ªÀº °¢°¢ÀÇ Å¸ÀÔ¿¡ µû¶ó ´Ù¸£¸ç ƯÁ¤ ºñÆ®°¡ 0ÀÌ ¾Æ´Ñ °ªÀÏ ¼öµµ ÀÖ½À´Ï´Ù. ½ÇÁ¦ ³Î Æ÷ÀÎÅÍÀÇ °ªÀº ÄÄÆÄÀÏ·¯ Á¦ÀÛÀÚ³ª ÇÊ¿äÇÑ °ÍÀÌÁö C ÇÁ·Î±×·¡¸Ó´Â ³Î Æ÷ÀÎÅͰ¡ ½ÇÁ¦ ¾î¶°ÇÑ °ªÀÎÁö ÀüÇô ¾Ë Çʿ䰡 ¾ø½À´Ï´Ù.
3.
³Î Æ÷ÀÎÅÍ »ó¼ö´Â Á¤¼ö »ó¼ö 0ÀÔ´Ï´Ù (Áú¹® 5.4 Âü°í).
4.
NULL ¸ÅÅ©·Î´Â 0À¸·Î Á¤ÀÇ(#define)µÇ¾î ÀÖ½À´Ï´Ù. (Áú¹® 5.4 Âü°í).
5.
ASCII ³Î ¹®ÀÚ (NUL)´Â ¸ðµç ºñÆ®°¡ 0ÀÎ °ªÀ¸·Î ³Î Æ÷ÀÎÅͿʹ À̸§¸¸ °°À» »Ó, ÀüÇô »ó°üÀÌ ¾ø½À´Ï´Ù.
6.
³Î ¹®ÀÚ¿­(null string)Àº ºó ¹®ÀÚ¿­ ("")À» ³ªÅ¸³»´Â ´Ù¸¥ ¸»·Î, C ¾ð¾î¿¡¼­ `³Î ¹®ÀÚ¿­'À̶ó´Â ¿ë¾î¸¦ ¾²´Â °ÍÀº È¥µ¿À» °¡Á®¿É´Ï´Ù. ºñ¾îÀÖ´Â ¹®ÀÚ¿­Àº ³Î ¹®ÀÚ('\0'À» ¸»ÇÏ´Â °ÍÀÌÁö, ³Î Æ÷ÀÎÅͿʹ »ó°ü ¾ø½À´Ï´Ù.

ÀÌ ±Û¿¡¼­´Â ``³Î Æ÷ÀÎÅÍ(null pointer)''¶ó´Â ¿ë¾î¸¦ À§ÀÇ 1¹øÀÇ ¸ñÀûÀ¸·Î »ç¿ëÇÕ´Ï´Ù. 3 ¹øÀÇ ¸ñÀûÀ¸·Î´Â 0À̳ª ``³Î Æ÷ÀÎÅÍ »ó¼ö''¶ó´Â Ç¥ÇöÀ» ¾²¸ç, 4 ¹øÀÇ ¸ñÀûÀ¸·Î ``NULL''À» »ç¿ëÇÕ´Ï´Ù.

Q 5.14
¿Ö ÀÌÅä·Ï ³Î Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ³íÀïÀÌ ¸¹Àº °ÍÀΰ¡¿ä? ¿Ö ÀÌ·± Áú¹®ÀÌ ÀÚÁÖ ³ª¿ÀÁÒ?

A
C ÇÁ·Î±×·¡¸ÓµéÀº ÀüÅëÀûÀ¸·Î Àú¼öÁØ ±â°èÀÇ ±¸Çö(machine implementation)¿¡ ´ëÇØ Á» ´õ ¸¹Àº °ÍÀ» ¾Ë±â ¿øÇÏ´Â °æÇâÀÌ ÀÖ½À´Ï´Ù. ¹®Á¦´Â ³Î Æ÷ÀÎÅͰ¡ ¼Ò½º ÄÚµå¿Í ±â°è ÀÚü¿¡ ´Ù ¾²ÀÌ´Â °³³äÀÌÁö¸¸, ½ÇÁ¦ ±â°è¿¡¼­´Â 0ÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀ¸·Î Ç¥ÇöµÉ ¼ö ÀÖ´Ù´Â µ¥¿¡ ÀÖ½À´Ï´Ù. Àü󸮱⠸ÅÅ©·ÎÀÎ NULLÀ» ¾²´Â °ÍÀÌ ³ªÁß¿¡ º¯°æµÉ ¼ÒÁö°¡ ÀÖ´Ù´Â °Íó·³ º¸ÀÏ ¼öµµ ÀÖ½À´Ï´Ù. ¶Ç ``if (p == 0)''À̶ó´Â ÄÚµå´Â 0À» Æ÷ÀÎÅÍÇüÀ¸·Î º¯°æÇÏ´Â °ÍÀÌÁö¸¸ p¸¦ Á¤¼öÇüÀ¸·Î º¯È¯ÇÏ´Â °Íó·³ º¸ÀÏ ¼öµµ ÀÖ½À´Ï´Ù. ¸¶Áö¸·À¸·Î ¿©·¯°¡Áö·Î ¾²ÀÌ´Â (Áú¹® 5.13 Âü°í) ``null''À̶ó´Â ¿ë¾î¸¦ °Ç¼ºÀ¸·Î º¸´Â °æÇâÀÌ ÀÖ½À´Ï´Ù.

C ¾ð¾î¿¡¼­ ÀÌ·± È¥µ¿À» ¾ø¾Ö±â À§ÇÑ ¹æ¹ýÀ¸·Î´Â ³Î Æ÷ÀÎÅÍ ¿ëµµ·Î ¾²±â À§ÇÑ (PascalÀÇnil°ú °°Àº) Ű¿öµå(keyword)¸¦ ¸¸µå´Â °ÍÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¸é ÄÄÆÄÀÏ·¯´Â ``nil''À» ÀûÀýÇÑ ³Î Æ÷ÀÎÅÍ·Î ¹Ù²Ù¾î ÁÙ ¼ö ÀÖÀ» °ÍÀ̸ç, ³Î Æ÷ÀÎÅͰ¡ ¿Ã ¼ö ¾ø´Â °÷¿¡¼­´Â °æ°í¸¦ ¹ß»ýÇØ ÁÙ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×·¯³ª ÇöÀç C ¾ð¾î¿¡¼­ ³Î Æ÷ÀÎÅ͸¦ ³ªÅ¸³»´Â Ű¿öµå´Â ``nil''ÀÌ ¾Æ´Ï¶ó ``0''ÀÔ´Ï´Ù. ±×¸®°í ³Î Æ÷ÀÎÅͰ¡ ¿Ã ¼ö ¾ø´Â °÷¿¡ 0ÀÌ ¾²À̸é, ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Á¤¼ö 0À¸·Î ÇØ¼®µÈ´Ù´Â °ÍÀÌ ´Ù¸¨´Ï´Ù.

Q 5.15
¸Å¿ì Çò°¥¸®´Â ±º¿ä. ³Î Æ÷ÀÎÅÍ¿¡ °üÇÑ ÀÌ ¸ðµç »çÇ×À» ÀÌÇØÇÒ ¼ö°¡ ¾ø±º¿ä.

A
ÀÌ·² ¶§ ÃëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ´ÙÀ½ µÎ°¡ÁöÀÇ °£´ÜÇÑ ±ÔÄ¢À» µû¸£´Â °ÍÀÔ´Ï´Ù:
1.
¼Ò½º Äڵ忡¼­ ³Î Æ÷ÀÎÅÍ »ó¼ö°¡ ÇÊ¿äÇÒ °æ¿ì, 0À̳ª NULLÀ» ¾¹´Ï´Ù.
2.
0 ¶Ç´Â NULLÀÌ ÇÔ¼ö ÀÎÀÚ·Î ¾²ÀÏ °æ¿ì¿¡´Â, ÀûÀýÇÑ Å¸ÀÔÀÇ Æ÷ÀÎÅͷΠij½ºÆÃÇØ¼­ »ç¿ëÇÕ´Ï´Ù.
³ª¸ÓÁö »çÇ×µéÀº ´ëºÎºÐ »ç¶÷µéÀÌ ³Î Æ÷ÀÎÅͰ¡ ½ÇÁ¦·Î °®´Â ³»ºÎÀûÀÎ °ª¿¡ ´ëÇØ À߸ø ÀÌÇØÇϰí ÀÖ°í (²À À̰ÍÀ» ÀÌÇØÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.), ÇÔ¼ö È£Ãâ¿¡ ´ëÇÑ º¹À⼺ ¶§¹®¿¡ ¹ß»ýÇÏ´Â °ÍÀÔ´Ï´Ù. (ÀÌ º¹À⼺À» °í·ÁÇÏ°í ³íÀÇÇÑ´Ù¸é µÎ¹øÂ° ±ÔÄ¢Àº ¸Å¿ì º¸¼öÀû(conservative)À̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ÇØ¸¦ ³¢Ä¡Áö´Â ¾Ê½À´Ï´Ù) Áú¹® 5.1, 5.2, 5.4¸¦ ÀÌÇØÇϰí 5.3, 5.9, 5.13, 5.14¸¦ Âü°íÇÏ´Â Á¤µµ¸¸À¸·Îµµ ÃæºÐÇÕ´Ï´Ù.

Q 5.16
ÀÌ·± È¥µ¿À» ¾ø¾Ö±â À§ÇØ, ´Ü¼øÈ÷ ³Î Æ÷ÀÎÅͰ¡ ³»ºÎÀûÀ¸·Î 0À¸·Î ³ªÅ¸³»¾î Áø´Ù°í ¸»ÇÏ´Â °ÍÀÌ ÁÁÁö ¾ÊÀ»±î¿ä?

A
´Ù¸¥ ÀÌÀ¯¾øÀÌ ±×·¸°Ô ÇÏ´Â °ÍÀº ¸Å¿ì À߸øµÈ »ý°¢ÀÔ´Ï´Ù. ¿Ö³ÄÇÏ¸é ¾î¶² ±â°è¿¡¼­´Â ³Î Æ÷ÀÎÅ͸¦ ¾µ °æ¿ì, ÀÚµ¿ÀûÀ¸·Î Çϵå¿þ¾î Æ®·¦(trap)ÀÌ ¹ß»ýÇϵµ·Ï ÇØ ³õ¾Ò±â ¶§¹®¿¡ ½ÇÁ¦·Î ³Î Æ÷ÀÎÅͰ¡ 0ÀÌ ¾Æ´Ñ ´Ù¸¥ °ªÀ¸·Î ¾²ÀÏ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.

°Ô´Ù°¡ ³Î Æ÷ÀÎÅÍ¿¡ ´ëÇØ Àß ÀÌÇØÇϱâ À§ÇØ, ½ÇÁ¦·Î ³»ºÎÀûÀ¸·Î Ç¥ÇöµÇ´Â ³Î Æ÷ÀÎÅÍÀÇ °ªÀ» (0ÀÎÁö ¾Æ´ÑÁö¿¡ ´ëÇØ) ¾Ë Çʿ䰡 ÀüÇô ¾ø½À´Ï´Ù. ´Ü¼øÈ÷ ³Î Æ÷ÀÎÅͰ¡ ³»ºÎÀûÀ¸·Î 0À¸·Î Ç¥ÇöµÈ´Ù°í »ý°¢ÇÑ´Ù°í ÇØ¼­, Äڵ带 ÀÛ¼ºÇϱ⠽¬¿öÁö´Â °Íµµ ¾Æ´Õ´Ï´Ù. (À߸øµÈ calloc()¿¡ ´ëÇÑ ¼³¸íÀ» Áú¹® 7.31¿¡¼­ Âü°íÇϱ⠹ٶø´Ï´Ù.) ±×¸®°í ³Î Æ÷ÀÎÅͰ¡ 0À̶ó°í ÇØµµ Æ÷ÀÎÅÍÀÇ Å©±â°¡ ŸÀÔ¿¡ µû¶ó ´Þ¶óÁú ¼ö Àֱ⠶§¹®¿¡ ¿©ÀüÈ÷ ÇÔ¼ö È£Ãâ¿¡¼­ ij½ºÆÃÀ» ÇØ¾ß ÇÕ´Ï´Ù. (¸¸¾à Áú¹® 5.14¿¡¼­ ¸»ÇÑ °Íó·³ ``nil''ÀÌ ³Î Æ÷ÀÎÅÍ·Î ¾²ÀÏ ¼ö ÀÖ´Ù¸é ³Î Æ÷ÀÎÅͰ¡ 0ÀÎÁö ¾Æ´ÑÁö¿¡ ´ëÇÑ ³íÀï ÀÚü°¡ Àǹ̾ø´Â °ÍÀÌ µÉ °ÍÀÔ´Ï´Ù.)

Q 5.17
½ÇÁ¦·Î, 0ÀÌ ¾Æ´Ñ ºñÆ® ÆÐÅÏÀ» »ç¿ëÇÏ´Â ±â°è³ª °¢°¢ÀÇ Å¸ÀÔ¿¡ µû¶ó ´Ù¸¥ ÇüÅÂÀÇ Æ÷ÀÎÅ͸¦ ¾²´Â ÄÄÇ»ÅͰ¡ ÀÖ³ª¿ä?

A
Prime 50 ½Ã¸®Áî´Â Àû¾îµµ PL/I ¾ð¾î¿¡¼­ ³Î Æ÷ÀÎÅ͸¦ ³ªÅ¸³»±â À§ÇØ ¼¼±×¸ÕÆ® 07777, ¿É¼Â 0À» »ç¿ëÇÕ´Ï´Ù. ÃÖ±ÙÀÇ ¸ðµ¨¿¡¼­´Â TCNP (Test C Null Pointer) ¸í·ÉÀ» ¾²±â À§ÇØ (C ¾ð¾î¿¡¼­) ¼¼±×¸ÕÆ® 0, ¿É¼Â 0À» »ç¿ëÇÕ´Ï´Ù. ¶Ç ¿À·¡µÈ ¿öµå ÁÖ¼Ò¸¦ ¾²´Â(word-addressed) Prime ±â°è´Â ¹ÙÀÌÆ® Æ÷ÀÎÅÍ (char *)º¸´Ù ¿öµå Æ÷ÀÎÅÍ (int *)°¡ Å©±â°¡ ´õ ÀÛ½À´Ï´Ù.

Data General»çÀÇ Eclipse MV ½Ã¸®Áî´Â ±â°è ¼öÁØ¿¡¼­ ¼¼ °¡ÁöÀÇ Æ÷ÀÎÅÍ Å¸ÀÔÀ» Á¦°øÇÕ´Ï´Ù (¿öµå, ¹ÙÀÌÆ®, ºñÆ® Æ÷ÀÎÅÍ). C ¾ð¾î¿¡¼­´Â µÎ °¡Áö ÇüŸ¦ »ç¿ëÇϸç char *¿Í void *´Â ¹ÙÀÌÆ® Æ÷ÀÎÅÍ·Î, ³ª¸ÓÁö Æ÷ÀÎÅÍ´Â ¿öµå Æ÷ÀÎÅÍ·Î ±¸ÇöµË´Ï´Ù.

¾î¶² Honeywell-Bell ¸ÞÀÎÇÁ·¹ÀÓ¿¡¼­´Â ³Î Æ÷ÀÎÅÍ °ªÀ¸·Î 06000À» »ç¿ëÇÕ´Ï´Ù.

CDC Cyber 180 ½Ã¸®Áî´Â ¸µ(ring), ¼¼±×¸ÕÆ®, ¿É¼Â ºÎºÐÀ¸·Î ÀÌ·ç¾îÁø 48 ºñÆ® Æ÷ÀÎÅ͸¦ »ç¿ëÇϸç, (¸µ 11ÀÇ) ´ëºÎºÐÀÇ »ç¿ëÀÚ´Â ³Î Æ÷ÀÎÅÍ·Î 0xB00000000000¸¦ »ç¿ëÇÕ´Ï´Ù. ¿À·¡µÈ CDC´Â 1ÀÇ º¸¼ö(one's complement) ¹æ½ÄÀ» »ç¿ëÇϸç, À߸øµÈ ÁÖ¼Ò¸¦ Æ÷ÇÔÇÑ ¸ðµç µ¥ÀÌÅÍÀÇ ¿¹¿Ü »óȲ¿¡ ¸ðµç ºñÆ®°¡ 1ÀÎ ¼öÄ¡¸¦ »ç¿ëÇÕ´Ï´Ù.

¿À·¡µÈ HP3000 ½Ã¸®Áî´Â À§¿¡¼­ ¾ð±ÞÇÑ ´Ù¸¥ ±â°èµéó·³ char *, void *¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í ³ª¸ÓÁö Æ÷ÀÎÅ͵éÀ» ¹ÙÀÌÆ® ¾îµå·¹½Ì°ú ¿öµå ¾îµå·¹½ÌÀ» ½á¼­ ±¸ÇöÇϸç, µÎ ¾îµå·¹½ÌÀÌ ¼­·Î ´Ù¸¥ ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù.

Symbolics Lisp ÄÄÇ»ÅÍ¿¡¼­´Â, (tagged architecture), ¾Æ¿¹ ¼öÄ¡·Î Ç¥ÇöµÇ´Â Æ÷ÀÎÅ͸¦ Á¦°øÇÏÁö ¾Ê½À´Ï´Ù. C ³Î Æ÷ÀÎÅÍ´Â <NIL, 0>À¸·Î ±¸ÇöµË´Ï´Ù. (±âº»ÀûÀ¸·Î <object, offset>À» »ç¿ëÇÔ.)

8086 °è¿­ÀÇ ÇÁ·Î¼¼¼­ (PC ȣȯ) ¿¡¼­´Â `¸Þ¸ð¸® ¸ðµ¨'¿¡ µû¶ó 16 ºñÆ® µ¥ÀÌÅÍ Æ÷ÀÎÅÍ¿Í 32 ºñÆ® ÇÔ¼ö Æ÷ÀÎÅ͸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù. ¶Ç´Â 32 ºñÆ® µ¥ÀÌÅÍ Æ÷ÀÎÅÍ¿Í 16 ºñÆ® ÇÔ¼ö Æ÷ÀÎÅ͸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù.

¾î¶² 64 ºñÆ® Cray ÄÄÇ»ÅÍ¿¡¼­´Â int *¸¦ ÇÑ ¿öµåÀÇ ÇÏÀ§ 48 ºñÆ®·Î Ç¥ÇöÇϸç, char *´Â ³ª¸ÓÁö »óÀ§ 16 ºñÆ®¸¦ ¿É¼ÂÀ¸·Î ½á¼­ Ç¥ÇöÇÕ´Ï´Ù.

Âü°í
K&R1 Sec. A14.4 p. 211.

Q 5.20
run-time¿¡ ``null pointer assignment''¶ó´Â ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù. ÀÌ°Ô ¹«¾ùÀ» ÀǹÌÇϳª¿ä? ¶Ç ¾î¶»°Ô ÇØ°áÇÒ ¼ö ÀÖÁÒ?
A
ÀÌ ¸Þ¼¼Áö´Â MS-DOS ¿ë ÄÄÆÄÀÏ·¯°¡ ÀÚÁÖ ¹ß»ý½ÃŰ´Â ÀüÇüÀûÀÎ Æ÷ÀÎÅÍ ¿¡·¯ ¸Þ½ÃÁöÀÔ´Ï´Ù. Áï ³Î (¶Ç´Â ÃʱâÈ­µÇÁö ¾ÊÀº) Æ÷ÀÎÅ͸¦ ½á¼­ À߸øµÈ À§Ä¡(´ë°³ µðÆúÆ® µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ ¿É¼Â 0)¿¡ ¾î¶² µ¥ÀÌÅ͸¦ ¾²·ÁÇÒ ¶§ ¹ß»ýÇÕ´Ï´Ù.

¾î¶² µð¹ö°ÅµéÀº µ¥ÀÌÅÍ ¿ÍÄ¡Æ÷ÀÎÆ®(watchpoint)¸¦ ÁÖ¼Ò 0¿¡ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù. ¶Ç´Â ¾Æ¿¹ ÁÖ¼Ò 0 ±ÙóÀÇ ¾à 20 ¹ÙÀÌÆ® Á¤µµ¸¦ ´Ù¸¥ °÷¿¡ º¹»çÇØµÎ°í ÁÖ±âÀûÀ¸·Î ºñ±³Çؼ­ º¯°æµÇ¾ú´ÂÁö¸¦ °Ë»çÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Áú¹® 16.8À» Âü°íÇϱ⠹ٶø´Ï´Ù.


next up previous contents
Next: ¹è¿­°ú Æ÷ÀÎÅÍ Up: C Programming FAQs Previous: Æ÷ÀÎÅÍ
Seong-Kook Cin
2001-01-01