1. MFC中使用全局变量
        对于全局的变量 在一个地方申明 如 ONE.CPP 在另一个地方要用 如 TWO.CPP 那么TWO.CPP中要重新申明一下,关键字就是extern 
  如:
 
  one.cpp
     
int temp;
  two.cpp
     
extern int temp;

 2.c语言的cdecl调用规范是特有的。
 例如有函数: int f(int,...) r = f(a1,a2,a3,a4)
它动作如下:
 1. 调用方,先把参数按从后面到前面的顺序压栈。 --> 为什么这么做?为了实现可变参数。特别是为main和printf所做的工作。 .... 如上面的f,在调用时按a4,a3,a2,a1顺序压栈。即使参数无数个,也不会影响函数的实现。

 2. 调用方,负责清理栈空间 --> 为什么这么做?因为到底压了多少个参数在栈里头,只有调用方才知道。

 3. 返回值,一概放到规定的寄存器中。 --> 为什么这么做?这样可以允许不使用返回值,寄存器不占用存储空间,不用关心内存资源问题。

  小结:使用了cdecl,c语言就可以只关心函数名,而不再关心参数个数,参数类型,函数的返回值问题。因此,一个函数名,仅仅表示了函数的入口,而c语言中的函数原型,仅仅是为了让编译器生成相应的调用代码。 因此,对于一个函数而言,函数原型,爱怎么定义就怎么定义,编译器和链接器都不会怪你;后果就是,如果原型定义有问题,运行结果要么是错的,要么程序甚至系统崩溃。

相关链接 为什么main有多种格式?

常量指针和指针常量

 
char  * const cp; ( * 读成 pointer to )

     cp is a const pointer to char ,亦即指针常量,cp(cp指向的地址)不可改变,但*cp,也就是cp所指对象能够改变。

const char * p;

char const * p;

     p is a pointer to const char,亦即指向常量的指针,所以p所指的对象不可改变。

void main()

{

 int a = 2;

 int b = 4;

intconst* pa = &a;//常量指针,指针指向常量

 int *const pb = &b;//指针常量,指针本身是常量

pa = &b;//right 常量指针,它所指向的地址可以改变

 *pb = 7;//right 指针常量,它所指向的值可以改变

 //*pa = 7;//error

 //pb = &b;//error

}