表示编译生成的内部符号名使用C约定
例如:
int Fun(int i,int j)
C:_Fun
C++:_Fun_int_int
具体生成什么可能与编译器有关
由于C++支持重载,而重载是在编译期确定的,所以C++必须在内部符号名上区分各重载函数,所以就将参数类型加在函数名后。

解决方案 »

  1.   

    extern "C" 放在函数声明前->表示为外部函数extern "C" 放在函数定义前->我没有见过
      

  2.   

    extern:表示这个函数是外部函数,也就是不是在本文件中。
    "c":表示这个函数使用c的命名约定,也就是不加什么装饰符。
    "c"用在函数说明和函数定义中都是这个意思,extern 可能只用在函数说明中。
      

  3.   

    extern "C"  BOOL WINAPI StartHook() //启动钩子函数 

    hhook=SetWindowsHookEx(WH_MOUSE,MouseProc,pInstance,0); //挂上钩子 
    if(hhook!=NULL) 
    return TRUE; 
    else 
    return FALSE;
    } 这个extern "C"不是放在函数定义前面吗???另外在什么情况下使用extern "C"呢??
      

  4.   

    extern不是应该放在函数或变量的声明前面吗?
    为什么又可以放在函数的定义前呢?
      

  5.   

    没事的,就像有人把.cpp文件中的函数实现部分放在.h中一样.连声明带实现.
      

  6.   

    这是一个很重要的声明,这样能保证编译器内部产生的函数名采用C方式,通常这种声明放在纯C函数,或放在DLL中的函数。而C++编译器会将你用在类中的函数进行一种所谓的Name Mangling,即在函数名称前加上特定的字符串,而Mangling的方式随编译器的不同而不同,所以如果不在函数前用extern "C"说明的话,将不能保证函数的正确调用。
      

  7.   

    rickeylau(RickeyLau):
    请注意extern 和extern "C"....;)