崇左网站建设公司,页面设计标准规范,做网站视频,不花钱网站怎么做一、C编译模式 通常#xff0c;在一个C程序中#xff0c;只包含两类文件——cpp文件和h文件。cpp文件被称作C源文件#xff0c;里面放的都是C的源代码#xff1b;h文件则被称作C头文件#xff0c;里面放的也是C的源代码。 C 语言支持“分别编译”#xff08;separ…一、C编译模式 通常在一个C程序中只包含两类文件——cpp文件和h文件。cpp文件被称作C源文件里面放的都是C的源代码h文件则被称作C头文件里面放的也是C的源代码。 C 语言支持“分别编译”separate compilation。也就是说一个程序所有的内容可以分成不同的部分分别放在不同的.cpp文件里。 cpp文件里的东西都是相对独立的在编译compile时不需要与其他文件互通只需要在编译成目标文件后再与其他的目标文件做一次链接link就行了。比如在文件a.cpp中定义了一个全局函数“void a() {}”而在文件b.cpp中需要调用这个函数。即使这样文件a.cpp和文件b.cpp并不需要相互知道对方的存在而是可以分别地对它们进行编译 编译成目标文件之后再链接整个程序就可以运行了。 二、C头文件 头文件的内容跟.cpp文件中的内容一样都是C源代码。但头文件不用被编译。 我们把所有的函数声明全部放进一个头文件中当某一个cpp源文件需要它们时它们就可以通过一个宏命令“#include”包含进这个cpp文件中从而把它们的内容合并到cpp文件中去。当cpp文件被编译时这些被包含进去的h文件的作用便发挥了。 #include的作用是把它后面所写的那个文件的内容完完整整地、一字不改地包含到当前的文件中来。值得一提的是它本身是没有其它任何作用与副功能的它的作用就是把每一个它出现的地方替换成它后面所写的那个文件的内容。简单的文本替换别无其他。因此main.cpp文件中的第一句#include math.h在编译之前就会被替换成math.h文件的内容。即在编译过程将要开始的时候main.cpp的内容已经发生了改变 三、头文件的书写 1、头文件中只能存在变量或者函数的声明而不要放定义。 因为一个头文件的内容实际上是会被引入到多个不同的cpp文件中的并且它们都会被编译。放声明当然没事如果放了定义那么也就相当于在多个文件中出现了对于一个符号变量或函数的定义纵然这些定义都是相同的但对于编译器来说这样做不合法。 2、头文件中可以写const对象的定义。 因为全局的const对象默认是没有extern的声明的所以它只在当前文件中有效。把这样的对象写进头文件中即使它被包含到其他多个cpp文件中这个对象也都只在包含它的那个文件中有效对其他文件来说是不可见的所以便不会导致多重定义。同时因为这些cpp文件中的该对象都是从一个头文件中包含进去的这样也就保证了这些cpp文件中的这个const对象的值是相同的可谓一举两得。 同理static对象的定义也可以放进头文件。 3、头文件中可以写内联函数inline的定义。 inline函数是需要编译器在遇到它的地方根据它的定义把它内联展开的而并非是普通函数那样可以先声明再链接的内联函数不会链接所以编译器就需要在编译时看到内联函数的完整定义才行。 如果内联函数像普通函数一样只能定义一次的话这事儿就难办了。因为在一个文件中还好我可以把内联函数的定义写在最开始这样可以保证后面使用的时候都可以见到定义但是如果我在其他的文件中还使用到了这个函数那怎么办呢这几乎没什么太好的解决办法。 因此C规定内联函数可以在程序中定义多次只要内联函数在一个cpp文件中只出现一次并且在所有的cpp文件中这个内联函数的定义是一样的就能通过编译。那么显然把内联函数的定义放进一个头文件中是非常明智的做法。 4、头文件中可以写类class的定义。 在程序中创建一个类的对象时编译器只有在这个类的定义完全可见的情况下才能知道这个类的对象应该如何布局所以关于类的定义的要求跟内联函数是基本一样的。所以把类的定义放进头文件在使用到这个类的.cpp文件中去包含这个头文件是一个很好的做法。 值得一提的是类的定义中包含着数据成员和函数成员。数据成员是要等到具体的对象被创建时才会被定义分配空间但函数成员却是需要在一开始就被定义的这也就是我们通常所说的类的实现。 一般的做法是把类的定义放在头文件中而把函数成员的实现代码放在一个cpp文件中。这是很好的办法。 还有另一种办法即直接把函数成员的实现代码也写进类定义里面。在C的类中如果函数成员在类的定义体中被定义那么编译器会视这个函数为内联的。因此把函数成员的定义写进类定义体一起放进头文件中是合法的。 注意一下如果把函数成员的定义写在类定义的头文件中而没有写进类定义中这是不合法的因为这个函数成员此时就不是内联的了。一旦头文件被两个或两个以上的cpp文件包含这个函数成员就被重定义了。 5、头文件需要保护措施 如果头文件中只包含声明语句那么它被同一个cpp文件包含再多次都没问题。但如果头文件是上述中某种情况定义了一些函数在cpp文件中包含了两次头文件就麻烦了。 使用#define配合条件编译可以很好地解决这个问题。在一个头文件中通过#define定义一个名字并且通过条件编译#ifndef...#endif使得编译器可以根据这个名字是否被定义再决定要不要继续编译该头文中后续的内容。这个方法虽然简单但是写头文件时一定记得写进去。转载自http://www.cnblogs.com/lidabo/archive/2012/04/17/2454568.html