常用关键字

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);

区别

  1. #ifnef、#ifdef、#define、#endif受C/C++标准支持,不受编译器的如何限制。
  2. 有些编译器不支持#pragma once,兼容性不够好。
  3. 不太灵活。因为它作用域是整个文件,而#ifndef、#ifdef、#define、#endif是可以灵活调整的。

注意

  1. 如果函数同时用声明和实现,要让函数声明extern "C"修饰,函数实现可以不被修饰。