C/C++混合编程

1.关键字extern “C”

记得之前面试官问我extern "C"了解不?说实话,当时我真的不了解,很少关注这个。现在我才明白,**extern “C”**的主要作用就是为了能够正确实现C++代码调用其他C语言代码。

加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

2.在头文件中使用声明函数,定义函数不需要

源文件mySub.c

#include "mySub.h"

/* Function Definitions */

/*
 * Arguments    : int a
 *                int b
 * Return Type  : int
 */
 
int mySub(int a, int b)
{
  long long i0;
  i0 = (long long)a - b;
  if (i0 > 2147483647LL) {
    i0 = 2147483647LL;
  } else {
    if (i0 < -2147483648LL) {
      i0 = -2147483648LL;
    }
  }

  return (int)i0;
}

头文件mySub.h

#ifndef __MYSUB_H__
#define __MYSUB_H__




#ifdef __cplusplus
 extern "C" {
#endif

extern int mySub(int a, int b);


#ifdef __cplusplus
}
#endif


#endif

其中,__cplusplus是C++编译器内置的宏

//__cplusplus是C++编译器内置的宏
#ifdef __cplusplus
 extern "C" {
#endif

//extern int mySub(int a, int b);

//__cplusplus是C++编译器内置的宏
#ifdef __cplusplus
}
#endif

这样,就可以使用了,或者可以把*.c改成,*.cpp文件,就可以使用功c++的编译器了。

你可能感兴趣的:(C/C++混合编程)