声明、定义、调用
容易混淆的是声明和定义
1、声明:C语言编译系统是由上往下编译的,如果函数是放在主函数后面的,没有声明,是调用不了的,因为c语言是从main函数开始执行,main函数结束,C语言的最大优点是编译后代码运行效率接近汇编程序,速度快,资源占用少。因此早期很多重要应用软件、支撑软件甚至系统软件是用C语言编写。
就像变量要事先声明,然后才能识别出来。
声明由三个部分组成
- 函数的返回类型
- 函数名
- 形参列表
传入两个参数a,b,int类型,函数名字fun,形参是指函数定义时候的使用的参数,接受调用函数时的参数值。
int fun(int a,int b);
函数声明是一个语句,末尾1需要加;
2、定义:
返回类型,函数名,形参列表
{函数体}
int fun(int a,int b)
{
int c;
c=a+b;
return c;
}
声明不需要开辟内存空间,而定义需要开辟空间,定义只有一次,声明有多次。
CCS代码
shift+Tab键补全,必须写完上一个语句,下面才可以补全;
补全的Uint32,和Uint32_t。
Uint32_t表示使用typedef定义的Uint32
在头文件.h中声明函数,不要写函数实现,源文件使用include包含相当于把头文件中声明拷贝过去,源文件中不需要声明了,.h如果放函数实现,会报函数重复定义错误,因为不知道使用哪个头文件,这两个头文件其实是一样的,但是因为include他的函数不同,所以编译器不知道。
结构体
struct +结构名+对象名
struct CONP
{
bool CurrLFlag;
bool CurrLEnFlag;
Unit16 PIfactor;
};
这步叫声明结构体变量,CONP叫结构体名,里面的bool int 叫成员列表,这时系统不会为它分配内存,因为他就是个类似int char的东西,只是打包了一些常用变量类型,方便大量类似对象的使用,如学生职员的信息录入。
但是他没有定义变量,如int a;int xas;…不同学生肯定不同代号名字,在旧的c语言中,定义结构体新变量时:(需要加上struct)
注意不是声明,已经声明过了,现在定义新变量。
struct CONP a;
格式上等价于
int a;
新的c++中直接
CONP a
某个程序员写多了这段类似程序,发现struct老是打一遍,发明了:
typedef struct CONP
{
bool CurrLFlag;
bool CurrLEnFlag;
Unit16 PIfactor;
}CONP1;
然后用CONP1就可以直接定义新变量。
带有#的指令,预处理,编译前进行处理,由软件执行
#include 包含其他头文件
#define 宏定义
#ifdef
程序
#else
程序
#endif