ÇÔ¼öÆ÷ÀÎÅÍÀÇ »ç¿ë
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 ÇÔ¼öÆ÷ÀÎÅÍÀÇ »ç¿ë
1.1 ÇÔ¼öÆ÷ÀÎÅͶõ
1.2 ÇÔ¼ö Æ÷ÀÎÅÍ ¼±¾ð
1.3 ÇÔ¼öÆ÷ÀÎÅÍ»ç¿ë ¿ëµµ
1.4 Generic ÇÔ¼ö(¾Ë°í¸®Áò)ÀÇ °³¹ß
1.5 ´Ù¸¥ Ȱ¿ë
1.6 Àü¼úÆÐÅÏ ÀÀ¿ë
1.7 ¿ÉÀú¹öÆÐÅÏ ÀÀ¿ë
2 °á·Ð
3 Âü°í¹®Çå
4 È÷½ºÅ丮


1 ÇÔ¼öÆ÷ÀÎÅÍÀÇ »ç¿ë

1.1 ÇÔ¼öÆ÷ÀÎÅͶõ

¿äÁò C ÇÏ´Â °³¹ßÀÚ¸¦ ã±â°¡ Èûµé´ø°¡¿ä ? ¿©±â Àú±â C¾ð¾î °³¹ßÀÚ¸¦ ¼Ò°³½ÃÄÑ ´Þ¶ó´Âµ¥, »ç¶÷ÀÌ ¾ø¾î¼­ ³­¸®ÀÔ´Ï´Ù.

C¾ð¾î ÇÏ¸é ¶°¿À¸£´Â°Ô Æ÷ÀÎÅÍÁÒ. µ¥ÀÌÅÍÀÇ À§Ä¡¸¦ °¡¸®Å°´Â µ¥ÀÌÅÍ Å¸ÀÔ¶ó°í »ý°¢ÇÏ¸é °£´ÜÇÑ °³³äÀ̱ä Çѵ¥, °³³äÀÌ ´Ü¼øÇÒ »Ó Àß ´Ù·ç±â´Â ½±Áö ¾Ê½À´Ï´Ù. Ä¿³ÎÀÌ °ü¸®ÇÏ´Â ¸Þ¸ð¸®¸¦ ³·Àº ¼öÁØ¿¡¼­ Á÷Á¢ °Çµå¸®±â ¶§¹®ÀÔ´Ï´Ù. ÅöÇÏ¸é ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» ħ¹üÇØ¼­ ÇÁ·Î±×·¥ÀÌ »¸¾î ¹ö¸®°í, Á» Àß µ¹¾Æ°£´Ù ½ÍÀ¸¸é ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏÁö ¾Ê¾Æ¼­ ¸ðµç ¸Þ¸ð¸®¸¦ ´Ù ½á¹ö¸®´Â ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù.

ÀüÇô Ãß»óÈ­ µÇ ÀÖÁö ¾Ê´Ù´Â ¾ê±âÁÒ. ±×·¯´Ï »ç¶÷ÀÌ Á÷Á¢ Ãß»óÈ­ ÇØÁà¾ß ÇÕ´Ï´Ù. ¿¹ÄÁµ¥ ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ÃʰúÇÏÁö ¾Ê°Ô Çϰųª, ¸Þ¸ð¸® ÇØÁ¦¸¦ °ü¸®ÇÏ´Â Äڵ带 Ãß°¡Çϰųª ÇÏ´Â µîÀÌÁÒ.

ÇÔ¼ö Æ÷ÀÎÅÍ´Â µ¥ÀÌÅÍ¿µ¿ª ´ë½Å¿¡ ÇÔ¼ö¸¦ °¡¸®Å°°Ú´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¾îÂ÷ÇÇ ÄÄÇ»ÅÍ´Â ÄÚµåµç µ¥ÀÌÅÍµç µ¿ÀÏÇÑ ÇüÅ·Πº¸±â ¶§¹®¿¡, µ¥ÀÌÅ͸¦ °¡¸®Å°´Â °Í°ú ±×´ÙÁö Â÷ÀÌ´Â ¾ø½À´Ï´Ù.

Áö³ª°¡´Â ¾ê±â. ¿äÁò ¾ð¾îµéÀº Æ÷ÀÎÅ͸¦ Á÷Á¢ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ¸ðµÎ Ãß»óÈ­ µÇÀÖÁÒ. °³¹ßÀÚ´Â ¾ó¸¶¸¸Å­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ¾ß ÇÏ´ÂÁö, Ȥ ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» ħ¹üÇÏÁö´Â ¾ÊÀ»Áö ¸Þ¸ð¸® ´©¼ö°¡ ¹ß»ýÇÒÁö µî¿¡ ´ëÇØ¼­ °í¹ÎÇÒ ÇÊ¿ä ¾øÀÌ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

¿äÁò °°Àº ¶§¿¡ C´Â öÁö³­ ¾ð¾î°°¾Æ º¸ÀÔ´Ï´Ù. ÇÏÁö¸¸ ¿©ÀüÈ÷ Java¿Í ÇÔ²² °¡À帹ÀÌ »ç¿ëÇÏ´Â ¾ð¾îÀÔ´Ï´Ù. ¾ð¾îº° »ç¿ëÀ² º¸·¯°¡±â

1.2 ÇÔ¼ö Æ÷ÀÎÅÍ ¼±¾ð

´ÙÀ½Àº ÇÔ¼öÆ÷ÀÎÅ͸¦ ¼±¾ðÇϱâ À§ÇÑ ÀüÇüÀûÀÎ ¹æ¹ýÀÌ´Ù.
return_type (*function)(arg1, arg2, ...); 
 
°¡¸®Å°±â À§ÇÑ ÇÔ¼öÀÇ ¸Å°³ º¯¼ö¿Í ¹Ýȯ °ªÀ» Àß ¸ÂÃçÁÖ¸é µË´Ï´Ù.

¿¹¸¦ int hello(char *) ¶ó´Â ÇÔ¼ö¸¦ °¡¸®Å°´Â ÇÔ¼öÆ÷ÀÎÅ͸¦ ¼±¾ðÇϰíÀÚ ÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ ¼±¾ðÇÏ¸é µË´Ï´Ù.
int (*func_name)(char *); 
 

´ÙÀ½Àº °£´ÜÇÑ ÇÔ¼ö Æ÷ÀÎÅÍ »ç¿ë ¿¹Á¦ÀÔ´Ï´Ù.

#include <stdio.h> 
void hello(char *name) 
{ 
    printf ("Hi %s\n", name); 
} 
 
int main() 
{ 
    void (*Func)(char *); 
    Func = hello; 
    Func("test"); 
} 
 
°£´ÜÇÑ ÄÚµåÀÔ´Ï´Ù. void ¹Ýȯ °ªÀ» °¡Áö°í ¸Å°³ º¯¼ö·Î·Î ij¸¯ÅÍ Æ÷ÀÎÅ͸¦ °¡Áö´Â ÇÔ¼öÆ÷ÀÎÅÍ Func¸¦ ¼±¾ðÇÑ ´ÙÀ½, hello ÇÔ¼ö¸¦ °¡¸®Å°°ÔÇß½À´Ï´Ù. ÀÌÁ¦ ÇÔ¼ö Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â hello ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

1.3 ÇÔ¼öÆ÷ÀÎÅÍ»ç¿ë ¿ëµµ

ÇÔ¼ö Æ÷ÀÎÅÍÀÇ ¹®¹ýÀº ºñ±³Àû ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹®Á¦´Â ¾îµð¿¡ ¿Ö »ç¿ëÇÏ´À³Ä ÇÏ´Â °ÅÁÒ. ÇÔ¼ö Æ÷ÀÎÅͶó´Â °ÍÀº ÇÔ¼ö¸¦ ÇѴܰè Ãß»óÈ­ Çϰڴٴ °Ì´Ï´Ù. °³¹ßÀÚ¿¡°Ô´Â ÀÎÅÍÆäÀ̽º¸¸ Á¦°øÇÏ°í ¿ëµµ¿¡ ¸Â°Ô »ç¿ëÇÏ°Ô ¸¸µå´Â°Ô ¸ñÇ¥ÀÔ´Ï´Ù.

ÇÔ¼ö Æ÷ÀÎÅÍÀÇ ¸ñÀûÀ» ÀÌÇØÇϸé, ¾îµð¿¡ ½á¾ßÇÒÁö °¨ÀÌ ÀâÈú °Ì´Ï´Ù.

1.4 Generic ÇÔ¼ö(¾Ë°í¸®Áò)ÀÇ °³¹ß

°¢ ÇлýÀÇ °ú¸ñº° ¼ºÀûµ¥ÀÌŸ°¡ ÀÖ°í, °ú¸ñº° ÃÖ°í Á¡¼ö¸¦ °¡Á®¿À´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù°í °¡Á¤ÇϰڽÀ´Ï´Ù óÀ½¿¡ ÀÌ ÇÁ·Î±×·¥Àº °¢ °ú¸ñÁß "±¹¾î"ÀÇ ÃÖ°í Á¡¼ö¸¸À» °¡Á®¿Àµµ·Ï ¸¸µé¾ú½À´Ï´Ù. ±×·±µ¥ "¼öÇÐ" ÃÖ°í Á¡¼ö¸¸À» °¡Á®¿Àµµ·Ï º¯°æÇÏ°í ½Í±º¿ä ¶»°Ô ÇØ¾ß ÇÒ±î¿ä ? ȤÀº ÃÖ°í ÆòÁ¡À» °¡Á®¿À±â¸¦ ¿øÇÒ¼öµµ ÀÖ°Í °Ì´Ï´Ù.

¹°·Ð ¸ðµç °æ¿ì¿¡ ´ëÇØ¼­ °íÀ¯ÀÇ ÀÛ¾÷À» ÇÏ´Â ÇÔ¼ö¸¦ ¿©·µ ¸¸µé µË´Ï´Ù¸¸ À¯Áö/º¸¼ö¼ºÀÌ ¶³¾îÁö°ÚÁÒ. ÀÌ °æ¿ì ÀԷ°ú Ãâ·ÂÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÌ °°À¸¹Ç·Î ÀϹÝÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦ ¸¸µç´Ù¸é Á» ´õ À¯Áö/º¸¼ö°¡ ¿ëÀÌÇÑ Äڵ带 ¸¸µé ¼ö ÀÖÀ» °Ì´Ï´Ù. ÇÔ¼ö Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼­ ÀÌ·± ÀÏÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.

#include <unistd.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <vector> 
 
using namespace std; 
 
typedef struct _pinfo 
{ 
    char name[12];   
    int  math; 
    int  korean; 
    int  eng; 
} pinfo; 
 
void printmax(vector<pinfo> va, void (*SortFunc)(vector<pinfo>)) 
{ 
    printf("ÃÖ°í ¼ºÀû Ãâ·Â ÇÁ·Î±×·¥\n"); 
    SortFunc(va); 
}    
 
void engmax(vector<pinfo> va) 
{ 
    int max = 0; 
    int index = 0; 
    for (int i = 0; i < va.size(); i++) 
    { 
        if (va[i].eng > max) 
        { 
            max = va[i].eng; 
            index = i; 
        } 
    } 
    printf("¿µ¾î ÃÖ°íÁ¡¼ö ȹµæÀÚ´Â %s : %d\n",  
        va[index].name, 
        va[index].eng); 
}; 
 
int main() 
{ 
    pinfo myinfo; 
    vector<pinfo> va; 
 
    myinfo.korean = 80; 
    myinfo.eng    = 65; 
    myinfo.math   = 99; 
    strncpy(myinfo.name, "yundream", 12); 
    va.push_back(myinfo); 
 
    myinfo.korean = 90; 
    myinfo.eng    = 65; 
    myinfo.math   = 74; 
    strncpy(myinfo.name, "kknd", 12); 
    va.push_back(myinfo); 
 
    myinfo.korean = 63; 
    myinfo.eng    = 88; 
    myinfo.math   = 55; 
    strncpy(myinfo.name, "junny", 12); 
    va.push_back(myinfo); 
 
    printmax(va, engmax); 
} 
 
ÀÌ Äڵ忡´Â printmax¶ó´Â ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÃÖ°í °ªÀ» Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÕ´Ï´Ù. ÃÖ°í °ªÀ» °è»êÇÏ´Â Äڵ带 Æ÷ÇÔÇÏ´Â ÇÔ¼ö´Â ÇÔ¼ö Æ÷ÀÎÅÍ·Î ¹Þ±â·Î Çß½À´Ï´Ù. ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­´Â engmax¸¦ Æ÷ÀÎÆ® Çß½À´Ï´Ù. ¸¸¾à ÃÖ°í ÆòÁ¡ÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ Ãâ·ÂÇÏ±æ ¿øÇÑ´Ù¸é ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ ¸¸µé¾î¼­ printmax¿¡ ¸Å°³ º¯¼ö·Î ³Ñ±â¸é µË´Ï´Ù.

void avgmax(vector<pinfo> va) 
{ 
    int max   = 0; 
    int total; 
    int index = 0; 
    for (int i = 0; i < va.size(); i++) 
    { 
        total = (va[i].eng + va[i].math + va[i].korean); 
        if ( total > max) 
        { 
            max = total; 
            index = i; 
        } 
    } 
    printf("ÃÖ°íÆòÀÚ Á¡Á¤º¸ : \n"); 
    printf("À̸§ : %s\n", va[index].name); 
    printf("¿µ¾î : %d\n", va[index].eng); 
    printf("±¹¾î : %d\n", va[index].korean); 
    printf("¼öÇÐ : %d\n", va[index].math); 
    printf("ÆòÁ¡ : %.2f\n", (float)max/3.); 
} 
 
¾Æ·¡¿Í °°ÀÌ printmax ¸¦ È£ÃâÇÏ¸é µË´Ï´Ù.
printmax(va, avgmax); 
 
ÀÌó·³ ÇÔ¼ö Æ÷ÀÎÅ͸¦ ³Ñ±èÀ¸·Î ÀÎÇØ¼­, ÇÁ·Î±×·¡¸Ó´Â Çʿ信 µû¶ó ¿ø ½î¾²ÀÇ Å« º¯È­¾øÀÌ ÀڱⰡ ÇÊ¿ä·Î ÇÏ´Â Äڵ常 Ãß°¡ÇÏ´Â ½ÄÀ¸·Î ÇÁ·Î±×·¥À» ½±°Ô È®Àå½Ãų¼ö ÀÖ½À´Ï´Ù.

1.5 ´Ù¸¥ Ȱ¿ë

¿©±â¿¡¼­´Â ÀÌ·¯ÇÑ ¿ëµµ·Îµµ »ç¿ëÀÌ °¡´ÉÇÏ´Ù´Â°É º¸¿©ÁÖ´Â ÆÁ¼öÁØÀÇ È°¿ë¿ëµµ¸¦ º¸¿©ÁÙ°ÍÀÌ´Ù.

Á¦°¡ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§ °¡²û »ç¿ëÇÏ´Â ¹æ¹ýÀε¥, Äڵ带 ±ò²ûÇÏ°í º¸±â ½±°Ô ¸¸µé¾îÁÝ´Ï´Ù. ¾²·¹µå ÇÔ¼ö¸¦ ÇÔ¼ö Æ÷ÀÎÅ͸¦ °ªÀ¸·Î ÇÏ´Â vector ¿¡ µî·ÏÇØ¼­ ¾²·¹µå »ý¼ºµî¿¡ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù.

À̹æ¹ýÀ» ¾²¸é ºñ·Ï ¸îÁÙÀ̱ä ÇÏÁö¸¸ ºÐ¸íÈ÷ ÄÚµù·®À» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¾²·¹µå ÇÔ¼ö¸¦ ÇÑ¿µ¿ª¿¡¼­ ¸ð¾Æ¼­ °ü¸®ÇÔÀ¸·Î Äڵ带 Á»´õ º¸±â ½±°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

#include <pthread.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <vector> 
#include <iostream> 
 
#define MAX_THREAD_NUM 20 
 
using namespace std; 
 
void *func1(void *) 
{ 
    printf("Thread 1\n"); 
    pause(); 
} 
void *func2(void *) 
{ 
    printf("Thread 2\n"); 
    pause(); 
} 
void *func3(void *) 
{ 
    printf("Thread 3\n"); 
    pause(); 
} 
void *func4(void *) 
{ 
    printf("Thread 4\n"); 
    pause(); 
} 
 
int main() 
{ 
    // ÀÎÀÚ°¡ ÇÔ¼öÆ÷ÀÎÅÍÀÎ vector »ý¼º 
    vector<void *(*)(void *)> thread_list; 
    vector<pthread_t> tident(MAX_THREAD_NUM); 
    int status; 
 
    thread_list.push_back(func1); 
    thread_list.push_back(func2); 
    thread_list.push_back(func3); 
    thread_list.push_back(func4); 
 
    cout << "µî·ÏµÈ ¾²·¹µå " << thread_list.size() << endl; 
    for (int i = 0; i < thread_list.size(); i++) 
    { 
        pthread_create(&tident[i], NULL, thread_list[i], (void *)NULL); 
    } 
 
    cout << "thread Join Wait" << endl; 
    for (int i = 0; i < tident.size(); i++) 
    { 
        pthread_join(tident[i], (void **)&status); 
    } 
    return 1; 
} 
 

1.6 Àü¼úÆÐÅÏ ÀÀ¿ë

ÇÔ¼ö Æ÷ÀÎÅÍ·Î Àü¼ú ÆÐÅϱ¸ÇöÇϱâ Âü°í

1.7 ¿ÉÀú¹öÆÐÅÏ ÀÀ¿ë

Á¤¸® Áß

2 °á·Ð

ÀÌ»ó °£´ÜÇÏ°Ô ÇÔ¼öÆ÷ÀÎÅÍÀÇ »ç¿ë¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾ÆºÃ½À´Ï´Ù.

»ç¿ë¹æ¹ýÀÌ ´«¿¡ ½¬ µé¾î¿ÀÁö ¾ÊÀ» ¼öµµ ÀÖÁö¸¸, ¾Ë¾ÆµÎ¸é ¸¹Àº µµ¿òÀÌ µË´Ï´Ù. C¿¡¼­ °´Ã¼ÁöÇâÀ» À§Çؼ­ ³Î¸® »ç¿ëÇϰí ÀÖÀ¸´Ï±î¿ä.

3 Âü°í¹®Çå

4 È÷½ºÅ丮

  1. ÀÛ¼ºÀÏ : 2003³â 1¿ù
  2. ¼öÁ¤ÀÏ
    • 2011³â 12¿ù 26ÀÏ
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.