C、C++混合开发
常用关键字
extern "C"
#ifndef
#ifdef
#define
#endif
#pragma once
__cplusplus
extern “C”
被extern "C"修饰的代码会按照C语言的方式去编译。
extern "C" void func(int a)
{
}
extern "C" void func(int a, int b)
{
}
extern "C"
{
void func(int a, int b)
{
}
void func(int a)
{
}
}
用途:C、C++混合开发。
// math.h
#ifndef __MATH_H // 防止重复包含,如果没有定义 MATH_H 这个宏
#define __MATH_H // 在这里就定义,下次在#include "math.h"的时候,下面的代码就不会参与编译。
#ifdef __cplusplus // 如果是c++文件,编译器会自己在文件中加上这个宏定义
extern "C"
{
#endif
int sum(int, int);
int divide(int, int);
#ifdef __cplusplus
}
#endif
#endif
// math.c
#include "math.h"
int sum(int a, int b)
{
return a + b;
}
double divide(int a, double b)
{
if ( b == 0 ) return 0;
return a / b;
}
#pragma once
我们经常会使用#ifndef、#ifdef、#define、#endif来防止头文件被重复包含。
#pragma once可以防止整个文件的内容被重复包含。
// test.h
#pragma once
int test(int, int);
区别
#ifnef、#ifdef、#define、#endif受C/C++标准支持,不受编译器的如何限制。- 有些编译器不支持
#pragma once,兼容性不够好。 - 不太灵活。因为它作用域是整个文件,而
#ifndef、#ifdef、#define、#endif是可以灵活调整的。
注意
- 如果函数同时用声明和实现,要让函数声明被
extern "C"修饰,函数实现可以不被修饰。
