1.为什么要使用externC在C++语言中,函数的名称会被编译器自动修改成为一个唯一的符号,以用于标识该函数。这就是所谓的名字携带。因此,在C++语言中,函数名必须与名字携带完全匹配,否则编译器找不到该函数。但是...

1.为什么要使用externC

在C++语言中,函数的名称会被编译器自动修改成为一个唯一的符号,以用于标识该函数。这就是所谓的名字携带。因此,在C++语言中,函数名必须与名字携带完全匹配,否则编译器找不到该函数。但是,在某些场合下,我们希望使用C++函数,而又希望能够通过C语言调用该函数,这时就需要用到externC。

因为C语言不会修改函数名,所以定义一个在C++中编写的函数并将其转换为C语言函数是有必要的。可以通过使用extern"C"{},来告诉编译器不使用名称携带,而是将函数名称直接作为符号。

2.重新定义函数的使用

函数的重新定义旨在更改函数所使用的符号,以便调用者可以访问该函数。如果您的C++应用程序或库需要与其他语言或其他C++代码集成,即使在链接过程中使用了正确的函数名称,也可能会发生函数名称冲突。在此种情况下,可以使用extern"C"重新定义函数,将其名称更改为可用名称,即C语言符号名称。这样,其他语言就可以直接使用该函数,而无需考虑函数名称冲突的问题。

另外,extern"C"还可以用于导入和导出C语言函数。当我们将C++库提供给其他语言和非C++编程语言使用时,可以使用此方法。

3.定义extern"C"代码示例

比如下面就是一个简单的示例,将C++代码中的函数定义改为C语言符号名称定义:

```

#ifdef__cplusplus

extern"C"{

#endif

typedefunsignedcharBYTE;

externintmyFunction(intnCount,BYTE*lpBuffer);

#ifdef__cplusplus

}

#endif

```

在这个示例中,使用#ifdef__cplusplus来标识当前是否处于C++环境中,以便只在必要的情况下包含extern"C"代码。

4.附加注意事项

需要注意的是,只有C++中的函数可以使用extern"C"重新定义,而不是可以使用C语言中的函数。另外,由于函数的重新定义是为了避免名称冲突,因此应该仅在需要将C++代码与其他语言或其他C++代码集成时才使用。在单独使用C++的应用程序中,没有必要使用extern"C"。

总之,extern"C"可以用于两个主要目的,一个是通过C语言调用C++函数,另一个是导入和导出C语言函数。如果您需要将C++代码与其他语言或其他C++代码集成,则可以使用extern"C"。否则,还是不要使用它为好。

extern"C"、函数名称携带、类的名称修饰同属于C++语言的一部分,需要对C++语法有一定的了解,方可正确使用。

关键词:externC,C++语言,函数重新定义,名称携带