[C++]°­ÁÂ(10)<--linkage ÁöÁ¤



¶ó. linkage ÁöÁ¤

C ¼Ò½º ÆÄÀϷκÎÅÍ ½ÇÇà ÆÄÀÏÀ» ¸¸µå´Â °úÁ¤Àº ¼Ò½º ÆÄÀÏÀ» ¿ÀºêÁ§Æ® ÆÄÀÏ·Î
¸¸µå´Â ÄÄÆÄÀÏ °úÁ¤°ú ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ½ÇÇà ÆÄÀÏ·Î ¸¸µå´Â ¸µÅ© °úÁ¤À¸·Î ³ª
´©¾îÁø´Ù. ÄÄÆÄÀÏ·¯´Â ÄÄÆÄÀÏ °úÁ¤¿¡¼­ ½ÇÇà ÆÄÀÏÀÇ ¸ðµç °ÍÀ» °áÁ¤ÇÒ ¼ö ¾ø´Ù.
¿Ö³ÄÇϸé C ¼Ò½º ÆÄÀÏ¿¡¼­ »ç¿ëµÇ´Â ÇÔ¼öµéÀº »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ÇÔ¼ö°¡ ¾Æ´Ñ ÇÑ
Àº Ç¥ÁØ ÇÔ¼öµç, ¶óÀ̺귯¸®¿¡ ÀÖ´Â ÇÔ¼öµç ±× ½ÇÁ¦ÀÇ ¹øÁö¸¦ ¾Ë ¼ö ¾ø±â ¶§¹®
ÀÌ´Ù. ÄÄÆÄÀÏ·¯´Â ÀÌ·± ½ÇÁ¦ ¹øÁö°ªÀ» ¾Ë ¼ö ¾ø´Â ÇÔ¼öÀÇ Á¤º¸¸¦ ¿ÀºêÁ§Æ® ÆÄ
ÀÏ¿¡ ±â·ÏÇØ µÎ°í ³ª¸ÓÁö´Â ¸µÄ¿¿¡°Ô ¸Ã±ä´Ù.
À̶§ ÄÄÆÄÀÏ·¯°¡ ¸µÄ¿¿¡°Ô ÇÔ¼ö¿¡ °üÇÑ Á¤º¸¸¦ ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ³²±â°Ô µÇ´Â
µ¥ ÀÌ Á¤º¸¸¦ linkage¶ó°í ÇÑ´Ù. ¸µÄ¿´Â ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ÀÖ´Â linkage Á¤º¸¸¦
º¸°í ¾î¶² ÇÔ¼ö°¡ °áÇյǾî¾ß ÇÒÁö¸¦ ÆÇ´ÜÇÏ°Ô µÈ´Ù. ±×·±µ¥ C¿Í C++¿¡¼­ link
age¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ °¢°¢ ´Ù¸£´Ù. ±âÁ¸ÀÇ C¿¡¼­´Â ÇÔ¼ö³¢¸®ÀÇ ±¸ºÐÀ» À§ÇØ
¼­´Â ÇÔ¼öÀÇ À̸§¸¸À¸·Îµµ ±¸ºÐÀÌ °¡´ÉÇß´Ù.
±×·¡¼­ linkage Á¤º¸·Î ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ±âÀԵǴ °ÍÀº ÇÔ¼öÀÇ À̸§À̾ú´Ù.
ÇÏÁö¸¸ C++¿¡¼­´Â ±â´ÉÀÌ È®ÀåµÊ(´ÙÇü¼º)À¸·Î Çؼ­ ÇÔ¼öÀÇ À̸§¸¸À¸·Î´Â ½ÇÁ¦
ÀÇ ¾î¶² ÇÔ¼ö¸¦ ÁöĪÇÏ´ÂÁö ±¸º°ÇÒ ¼ö ¾ø°Ô µÇ¾ú´Ù.
C++Àº ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ÇÔ¼ö¿¡ °üÇÑ Á¤º¸¸¦ ÇÔ¼öÀÇ À̸§»Ó¸¸ ¾Æ´Ï¶ó ÇÔ¼ö°¡
ÃëÇÏ´Â ÀμöÀÇ °³¼ö¿Í µ¥ÀÌÅÍ Å¸ÀÔ±îÁö ÇѲ¨¹ø¿¡ Áý¾î³Ö´Â´Ù. ÀÌ·¸°Ô C++ÀÌ ÀÛ
¼ºÇÏ´Â linkage¸¦ mangled nameÀ̶ó°í ÇÑ´Ù. µÎ ¾ð¾î°¡ linkage¸¦ ÀÛ¼ºÇÏ´Â ¹æ
¹ýÀÌ ´Ù¸§¿¡ µû¶ó ¸µÅ© °úÁ¤¿¡¼­ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. C Çü½ÄÀ¸·Î Â¥¿©Áø ÇÔ¼ö´Â
linkage°¡ mangled nameÀ¸·Î ±âÀÔµÇÁö ¾ÊÀ½À¸·Î Çؼ­ C++ ¸µÄ¿(TLINK.EXE)°¡
ÇÔ¼ö¸¦ ÀÎ½Ä Çس»Áö ¸øÇÏ°Ô µÈ´Ù.
C ¼Ò½º ÆÄÀÏÀÌ ÀÖ´Ù¸é C++ ÄÄÆÄÀÏ·¯·Î ´Ù½Ã ÄÄÆÄÀÏÇÏ¸é µÇÁö¸¸ ±×·¸Áö ¸øÇÑ
¶óÀ̺귯¸®³ª ¿ÀºêÁ§Æ® ÆÄÀÏÀº C++ ÄÄÆÄÀÏ·¯¿¡ ±×´ë·Î »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×·¸´Ù
°í Çؼ­ C·Î Â¥¿©Áø ÇÔ¼ö¸¦ ´Ù½Ã C++·Î §´Ù´Â °ÍÀº ¾öû³­ ½Ã°£Àû, ÀηÂÀû ³¶
ºñ¸¦ ÃÊ·¡ÇÒ °ÍÀÌ´Ù. ±×·¡¼­ C++ ÄÄÆÄÀÏ·¯°¡ CÇüÀÇ ÇÔ¼ö¸¦ ÀνÄÇÒ ¼ö ÀÖµµ·Ï
Ưº°È÷ ÁöÁ¤ÇØÁÖ´Â ¹æ¹ýÀÌ Á¦°øµÇ´Â µ¥ ÀÌ°ÍÀ» linkage ÁöÁ¤À̶ó°í ÇÑ´Ù. link
age ÁöÁ¤Àº ´ÙÀ½°ú °°ÀÌ ÇÔ¼öÀÇ ¿øÇü ¾Õ¿¡ extern "C"¸¦ ºÙ¿©ÁÖ¸é µÈ´Ù.

extern "C" int myfunc( void);

¶Ç´Â ¿©·¯ °³ÀÇ ÇÔ¼ö¸¦ { }¸¦ »ç¿ëÇؼ­ ÇѲ¨¹ø¿¡ ¹­¾î¼­ CÇüÀ¸·Î ¼±¾ðÇÒ ¼öµµ
ÀÖ´Ù.

extern "C"
{
 int myfunc( void);
 int mygraph( int x, int y);
 void destroy( int pp);
}

¾Æ´Ï¸é ¾Æ¿¹ ¿øÇüÀÌ Á¤ÀǵǾî ÀÖ´Â Çì´õ ÆÄÀÏÀ» Åë°·Î µÑ·¯½Îµµ µÈ´Ù.

extern "C"
{
 #include "myhead.h"
}

C·Î Â¥¿©Áø ¶óÀ̺귯¸®¸¦ C++ ¼Ò½º¿¡¼­ »ç¿ëÇÏ°íÀÚ ÇÒ °æ¿ì´Â ¹Ýµå½Ã linkage
ÁöÁ¤À» ÇØÁÖ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸µÄ¿°¡ ÇÔ¼ö°¡ ¹ß°ßµÇÁö ¾Ê´Â´Ù°í Åõ´ú
´î °ÍÀÌ´Ù. ¶ÇÇÑ ÀÌ¹Ì C·Î Â¥¿©Á® ÀÖ´Â ¿©·¯ °¡Áö ´Ù¾çÇÑ ¶óÀ̺귯¸®°¡ ´ëºÎºÐ
mangled nameÀÇ linkage¸¦ ±¸¼ºÇÏ°í ÀÖÁö ¾ÊÀ¸¹Ç·Î linkage ÁöÁ¤À» ÇÊ¿ä·Î ÇÑ
´Ù. ADLIB sound ¶óÀ̺귯¸®°¡ ±× ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù. ±×¸®°í ¾î¼Àºí¸® ¸ðµâ·Î
Â¥¿©Áø ÇÔ¼öµµ ¸¶Âù°¡Áö·Î linkage ÁöÁ¤À» ÇÊ¿ä·Î ÇÑ´Ù.
ÇÑ±Û ¶óÀ̺귯¸®ÀÎ shhanÀÇ Çì´õ ÆÄÀÏÀ» º¸ÀÚ.
*) ÀÌ ¶óÀ̺귯¸®´Â ÇÏÀÌÅÚ ÀÚ·á½ÇÀ» Àß µÚÁ® º¸¸é 56ºÐ 32Ãʸ¸¿¡ ¹ß°ßÇÒ ¼ö
ÀÖÀ½

#ifndef __LARGE__
#error this library must compile in large model
#endif
extern "C"
{
 void shhan( int x, int y, char *str, int fcolor, int bcolor,
     int attr, int put);
 void shset( int gd, int gm);
 void shmode( int mode);
 void shget( int x, int y, char *str, int fcolor, int bcolor,
     int limit, int keep);
}

ÀÌ ¶óÀ̺귯¸®°¡ ¾î¼Àºí¸® ¾ð¾î·Î Â¥¿©Á® Àֱ⠶§¹®¿¡ extern "C" ÁöÁ¤À» ÇØÁÖ
°í ÀÖ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ±âÁ¸ÀÇ C Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öµéµµ ´ëºÎºÐ C++ Çü½ÄÀ¸
·Î ´Ù½Ã Â¥¿©ÁöÁö ¾Ê¾Æ ±×´ë·Î »ç¿ëÇ쵂 linkage ÁöÁ¤À» ÇÑ´Ù. C¿¡¼­ °¡Àå ÀÚ
ÁÖ »ç¿ëµÇ´ø Çì´õ ÆÄÀÏÀÎ stdio.h¸¦ »ìÆ캸¸é ´ÙÀ½°ú °°Àº ±¸¹®ÀÌ ÀÖÀ½À» È®ÀÎ
ÇÒ ¼ö ÀÖ´Ù. C¿¡¼­ »ç¿ëµÇ´ø ´ëºÎºÐÀÇ Çì´õ ÆÄÀÏ¿¡ ÀÌ·± ¹®±¸°¡ Æ÷ÇԵǾî ÀÖ´Ù.

#ifdef __cplusplus
extern "C" {
#endif

Àǹ̴ C++ ¹®¹ýÀ¸·Î ÄÄÆÄÀ쵃 °æ¿ì ÀÌÈÄÀÇ ÇÔ¼öµéÀ» ¸ðµÎ extern "C" linkage
ÁöÁ¤À» ÇÑ´Ù´Â ¶æÀÌ´Ù. ÀÌ ÁöÁ¤À» »© ¹ö¸®¸é C¿¡¼­ ÀÚÁÖ ¾Ö¿ëÇÏ´ø ¸¹Àº Ç¥ÁØ
ÇÔ¼öµéÀ» »ç¿ëÇÏÁö ¸øÇÏ°Ô µÇ´Â ¼ÕÇØ ¸·½ÉÇÑ »çÅ°¡ ¹ß»ýÇÏ°Ô µÈ´Ù. linkage
ÁöÁ¤Àº C++¿¡¼­ Ãß°¡µÈ ¹®¹ýÀ̶ó±âº¸´Ù´Â C¿Í C++À» µ¿½Ã¿¡ È°¿ëÇϱâ À§ÇÑ ¹æ
¹ýÀ̶ó°í º¸¾Æ¾ß ¿Ç´Ù.

2Àå.Ŭ·¡½º

ÀÌ Àå¿¡¼­´Â Ŭ·¡½º¸¦ ¼Ò°³Çϱâ Àü¿¡ ±¸Á¶Ã¼°¡ C++¿¡¼­ ¾î¶² ½ÄÀ¸·Î È®ÀåµÇ¾ú
´ÂÁö »ìÆ캸°í ³­ ÈÄ¿¡ È®ÀåµÈ ±¸Á¶Ã¼·ÎºÎÅÍ Å¬·¡½º¸¦ ¼³¸íÇÑ´Ù. Ŭ·¡½ºÀÇ °³
³ä ±× ÀÚü´Â °áÄÚ ¾î·Á¿î °ÍÀÌ ¾Æ´Ï¹Ç·Î ¿¹Á¦¸¦ ½ÇÇà½ÃÄÑ º¸°í Ã¥¸¸ Á¦´ë·Î
Àо´Ù¸é ¾î·ÆÁö ¾Ê°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù.

**********************************************
**********************************************
2-1 ±¸Á¶Ã¼ÀÇ È®Àå

¿ì¼± ±¸Á¶Ã¼ÀÇ ±âº»ÀûÀÎ °³³äºÎÅÍ ´Ù½Ã Á¤¸®Çغ¸¸é ±¸Á¶Ã¼¶õ ÀÌÇü º¯¼öÀÇ ¸ð
ÀÓ, Áï µ¥ÀÌÅÍ Å¸ÀÔÀÌ ´Ù¸¥ º¯¼öµéÀÌ ÇϳªÀÇ À̸§ ÇÏ¿¡ ¸ð¿©ÀÖ´Â °ÍÀÌ´Ù. È­¸é
»óÀÇ ÇÑ ÁÂÇ¥ÀÇ À§Ä¡¿Í ±× À§Ä¡ÀÇ ¹®ÀÚ¸¦ ±¸Á¶Ã¼ Çϳª·Î Ç¥ÇöÇÏ°íÀÚ ÇÑ´Ù¸é ´Ù
À½°ú °°Àº ¸ð¾çÀÌ µÉ °ÍÀÌ´Ù.

 struct Position
 {
     int px;         // X ÁÂÇ¥
     int py;         // Y ÁÂÇ¥
     char ch;        // Ãâ·ÂµÈ ¹®ÀÚ
 };

Á¤¼öÇü º¯¼ö px, py°¡ È­¸éÀÇ x ÁÂÇ¥, y ÁÂÇ¥¸¦ ´ã°í ÀÖÀ¸¸ç ¹®ÀÚÇü º¯¼ö ch´Â
±× À§Ä¡¿¡ Ãâ·ÂµÇ¾î ÀÖ´Â ¹®ÀÚ¸¦ ´ã´Â´Ù. Á¤¼öÇüÀÇ µ¥ÀÌÅÍ¿Í ¹®ÀÚÇüÀÇ µ¥ÀÌÅÍ
°¡ PositionÀ̶ó´Â À̸§À¸·Î °°ÀÌ ¸ð¿© ÀÖ´Ù. Position ±¸Á¶Ã¼¸¦ »ç¿ëÇØ È­¸é
»ó¿¡ ¹®ÀÚ Çϳª¸¦ Ãâ·ÂÇÏ´Â ¿¹Á¦¸¦ ¸¸µé¾î º¸¾Ò´Ù.

#include <stdio.h>
#include <iostream.h>
#include <conio.h>

struct Position
{       // Position ±¸Á¶Ã¼ÀÇ Á¤ÀÇ
 int px;
 int py;
 char ch;
};

void outpos( Position);

void main()
{
 clrscr();
 Position HERE;        // ±¸Á¶Ã¼ÀÇ »ý¼º
 HERE.px = 10;         // ¸â¹ö Á¤ÀÇ
 HERE.py = 10;
 HERE.ch = 'S';
 outpos( HERE);        // ¹®ÀÚ Ãâ·Â
}

void outpos( Position POS)
{
 gotoxy( POS.px, POS.py);  // ±¸Á¶Ã¼ÀÇ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
 putch( POS.ch);
}

³Ê¹« °£´ÜÇÑ ¿¹Á¦¶ó Á× Àо º¸¸é ½±°Ô ÀÌÇØ°¡ °¥ °ÍÀÌ´Ù. ½ÇÇà °á°ú´Â ±ú²ý
ÇÏ°Ô Áö¿öÁø È­¸éÀÇ (10,10) ÁÂÇ¥¿¡ ¹®ÀÚ 'S'°¡ Ãâ·ÂµÈ ¸ð¾çÀÌ µÈ´Ù. ¿¹Á¦ 18-
1¿¡¼­´Â Position ±¸Á¶Ã¼°¡ È­¸é»óÀÇ ÇÑ À§Ä¡¿¡ °üÇÑ Á¤º¸¸¦ ´ãµµ·Ï Á¤ÀǵǾú
°í Position ±¸Á¶Ã¼¸¦ »ç¿ëÇÏ¿© Position ±¸Á¶Ã¼°¡ Ç¥ÇöÇÏ´Â È­¸é»óÀÇ Á¤º¸¸¦
Ãâ·ÂÇÒ ¼ö ÀÖ´Â ÇÔ¼ö outpos°¡ Á¤ÀǵǾî ÀÖ´Ù. À̶§ Position ±¸Á¶Ã¼¿Í outpos
´Â »óÈ£ ÀÇÁ¸ÀûÀÎ °ü°è¸¦ °¡Áö¸ç ¹ÐÁ¢ÇÏ°Ô °ü°èµÈ µ¥ÀÌÅÍ¿Í ÄÚµåÀÌ´Ù.
±¸Á¶Ã¼ PositionÀº outpos ÇÔ¼ö°¡ ¾øÀ¸¸é Á¸Àç ±× ÀÚü¸¦ ³ªÅ¸³¾ ¼ö ¾ø°í out
pos´Â Position ±¸Á¶Ã¼°¡ ¾øÀ¸¸é Àڽſ¡°Ô ºÎ¿©µÈ ÀÛ¾÷À» ÇÒ ¼ö ¾ø´Ù. outpos
ÇÔ¼ö°¡ ÃëÇÏ´Â Àμö°¡ PositionÇüÀÇ ±¸Á¶Ã¼À̸ç Àü´Þ¹ÞÀº ±¸Á¶Ã¼ÀÇ Á¤º¸¸¦ Ãâ
·ÂÇϵµ·Ï µÇ¾î ÀÖ´Ù. ±×·¡¼­ Position°ú outpos´Â Ç×»ó °°ÀÌ ºÙ¾î ´Ù´Ï°Ô µÈ´Ù.
´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ¿Å±â´õ¶óµµ Position ±¸Á¶Ã¼¸¸, ¶Ç´Â outpos ÇÔ¼ö¸¸ °¡Áö°í
°¡¼­´Â ¾µ ¼ö°¡ ¾ø´Ù.
±×·¡¼­ C++¿¡¼­´Â ÀÌ·¸°Ô ¹ÐÁ¢ÇÏ°Ô °ü°èµÇ¾î ÀÖ´Â µ¥ÀÌÅÍ¿Í Äڵ带 ¾Æ¿¹ Çϳª
ÀÇ ¹üÀ§¿¡ Åë°·Î °°ÀÌ Æ÷ÇÔ½Ãų ¼ö ÀÖ´Â ¹æ¹ýÀÌ Á¦°øµÈ´Ù. ±¸Á¶Ã¼°¡ ³»ºÎ¿¡
ÇÔ¼ö¸¦ Æ÷ÇÔÇØ ¹ö¸®´Â ¹æ¹ýÀε¥ ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.


À̾ °è¼ÓµË´Ï´Ù. ==============>>>>>>>


--------------------------------------------------------------------------------