1 C的声明与定义
声明是告诉编译器存在某一个函数或者变量
定义是编译器为某一名称的函数或变量分配存储地址
定义可以包括声明
声明常常使用extern关键字,不带函数体的函数自动作为声明,可以理解为自动加上extern关键字。
C++函数原型: 返回类型 函数名(<参数1类型>,<参数2类型>...);
C++中函数声明至少是一个函数原型,函数定义时必须给出各个参数名
C 和C++ 都允许对函数重复声明
2 C++中,struct里面可以声明,定义函数,所声明的函数成为成员函数,成员函数的定义可以在结构体之外,定义:
返回类型 结构体名称::函数名(参数表)
{函数体};
::为C++的新定义的运算符,成为作用域限定符
3 C++中如果一个结构体只有一个成员函数,那么sizeof得到的值是一个负数
4 预处理防止重复声明结构体
#ifndef FOO_H_
#define FOO_H_
// Rest of header here ...
#endif // FOO_H_
5 嵌套结构声明
struct stack
{
/*在结构体stack内直接声明一个结构体link*/
struct link
{
void* data;
link* next;
void initialize();
}*head; //定义了link* 类型的一个名称为head的成员属性
//初始化函数与link的initailize()函数不干扰
void inititalize();
void push();
void peek();
void pop();
void cleanup();
};
各个函数的定义需要根据嵌套结构使用::进行定义函数
6 全局范围分解
在定义成员函数的时候,函数体里面的标识名如果不用作用域限定符::,则默认去检查结构体或者类里面是否有这个成员,如果没有则再去检查全局标识符是否有,但有时结构体和全局都有某个同名的标识符时,我们需要用到的是全局的标识符,则需要通过 ::标识名 来使用标识函数或变量,就是用过前面不加任何域的作用域运算符来指定标识,如
int a;//全局变量a
void f(); //全局函数f
struct A
{
int a;
void f();
};
void A::f()
{
::a = 1; //对全局的赋值
a = 2;//对结构体的成员变量a赋值
::f(); //调用全局函数
f();//调用成员函数
};