static 和 inline
static
static 的变量,如果没有指定初始化的值,那么就会初始化为0,无论有没有指定初始化值,都只会初始化一次!
static 生命周期和全局变量一样
inline 内联函数
可能会将 函数的参数不进行出入栈操作 而是直接 在调用的地方 进行编译运算
但是现在编译器会更具自己的判断 进行是否需要内联 不再需要我们手动设置(仅对编译器起建议作用)
从编译器角度理解定义和声明
编译器在读代码时 是 从上往下解析的,从第一行第一个字开始读
编译器在确定一个函数时 最重要的是通过 参数 和 返回值来 确定一个函数
可以让 编译器 通过 声明 来 定位到 函数的定义(函数的具体实现) 进行编译
定义只能有一次,声明不限制,定义和声明不止能作用到函数,变量同样适用。
extern int fun(int a,int b); //声明!
extern int a;//变量 要显示的增加 extern 关键字
头文件和源文件
模块化编程
头文件不会主动编译,只有在被调用时才会编译(include)
#pragma once 防止 一个源文件里多次 调用
或者
#ifndef _HEADNAME_ //如果没有定义则往下走
#define _HEADNAME_
#endif//!_HEADNAME_
extern
实现c++调用c函数
extern "C" int fun();//声明为c风格的函数
extern "c"{
int fun1();
int fun2();
}
extern "C"{
#include 头文件
}