C/C++文件类型:1,头文件.h,2, 源代码文件.CPP/.C
1, .h头文件一般包含以下内容:
a, 明显常量-------例如,典型的stdio.h文件定义EOF, NULL,和BUFSIZE。
b, 宏函数---------例如,getchar()通常被定义为getc(stdin), get() 通常被定义为较复杂的宏,而头文件ctype.h通常包含
ctype函数的定义。
c, 函数声明--------例如,头文件string.h(在某些旧的系统中为string.h)包含字符串函数系列的函数声明。在ansi c中声明采用函数原型形式。
d, 类型定义----------可以使用指向FILE的指针作为参数调用标准I/O函数。通常,stdio.h用#define或typedef使得FILE代表指向FILE结构的指针。与之类似,size_t和time_t类型也在头文件中定义。
可执行代码通常在源代码文件中,而不在头文件里。头文件里的内容通常是编译器用产生可执行代码的信息。
变量的声明:变量的声明分为两种,定义声明和引用声明。
定义声明:一般把需要为变量建立空间的声明叫做定义声明。例如:int a;int a = 10;类A A a;会调用A的默认构造函数为a创建空间。
引用声明:一般把不需要为变量建立空间的声明叫做引用声明。例如:extern int a; 利用extern声明变量时不可以直接为其赋值,extern int a = 10; error: 'extern'variable cannot have an initializer.
我们一般将定义声明称为定义,将引用声明称为声明。
外部变量(全局变量)的"定义"与外部变量的"声明"是不相同的,外部变量的定义只能有一次,而声明可以有多次。
头文件可以用来声明多个文件共享的外部变量。例如,如果开发共享某个变量的一系列函数,该变量报告某种类型(如错误情况)的状态,这种方法就很有用
处。此时,可以在包含函数声明的源代码文件中定义一个具有文件作用域,外部链接的变量。
int status = 0; //文件作用域,源代码文件中A.cpp
接着,可以在源代码文件相关联的头文件中进行引用声:
extern int status; //头文件中A.h
变量status 的链接性为外部,所以可以多文件共享。但是在包含其头文件的源代码文件中只可以有声明不可以再对其定义,否则就会出现重复定义错误。
用Static来声明一个变量的作用有二:
a,对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。
b,外部变量用static来声明,则该变量的作用只限于本文件模块。每个包含该头文件的的文件都获得一份该常量的副本。
所以static声明定义的变量可以在多个文件中重复定义。
例如:1, A.h中定义了static int a = 5; B.h中又定义了static int a = 6;互不干扰。
2, A.h 中定义了static int a = 5;B.h中添加#include"A.h", 不受影响,A.h 和B.h各有一个static int a变量定义。如果去掉static,只是在A.h定义了int a = 5;然后B.h包含A.h,则会出现duplicate symbol _b的错误。因为static是内部链接属性,而一个变量默认是auto的外部链接属性。
用const来声明一个全局变量时和static一样,也是文件作用域,内部链接属性。在多个文件中重复定义不受影响。每个包含该头文件的的文件都获得一份该常量的副本。
#ifndef #define 其他定义 #end
一般在头文件的最初部分加入条件编译指令,例如在A.h文件中加入
#ifndef _A_H
#define _A_H
其他定义
#end
用以防止重复引用。
对于c/c++ 可以使用命令 预处理指令:gcc -E file.c -o file.i 注意:-C -E一起使用是预编译的时候保留注释。file.i即为file.c预处理后的输出文件。
编译指令:gcc -S file.c -o file.s直接产生汇编文件file.s
汇编指令:gcc -c file.c -o file.o 注意:-c是编译汇编不连接。生成机器码文件:file.o
链接指令:gcc file.o file1.o -o file 生产可执行文件file
直接编译成可执行文件:gcc file.c -o file
附上GCC的使用说明: