您现在的位置是:主页 > news > 萍乡网站开发公司/html简单网页设计作品

萍乡网站开发公司/html简单网页设计作品

admin2025/6/26 4:52:47news

简介萍乡网站开发公司,html简单网页设计作品,怎么查一个网站是什么程序做的,当阳建设中学网站预处理: 展开所有的宏定义并删除 #define 处理所有的条件编译指令,例如 #if #else #endif #ifndef … 把所有的 #include 替换为头文件实际内容,递归进行 把所有的注释 // 和 / / 替换为空格 添加行号和文件名标识以供编译器使用 保留所…

萍乡网站开发公司,html简单网页设计作品,怎么查一个网站是什么程序做的,当阳建设中学网站预处理: 展开所有的宏定义并删除 #define 处理所有的条件编译指令,例如 #if #else #endif #ifndef … 把所有的 #include 替换为头文件实际内容,递归进行 把所有的注释 // 和 / / 替换为空格 添加行号和文件名标识以供编译器使用 保留所…

预处理

展开所有的宏定义并删除 #define

处理所有的条件编译指令,例如 #if #else #endif #ifndef …

把所有的 #include 替换为头文件实际内容,递归进行

把所有的注释 // 和 / / 替换为空格

添加行号和文件名标识以供编译器使用

保留所有的 #pragma 指令,因为编译器要使用

编译:
把预处理之后的文件进行一系列词法分析、语法分析、语义分析以及优化后生成的相应汇编代码文件。

一个个.cxx文件生成了一个个目标文件(.o或.obj文件)

汇编

再下来是汇编步骤,我们继续用一句话来描述:汇编就是将编译后的汇编代码翻译为机器码,几乎每一条汇编指令对应一句机器码。

链接:
在makefile里面说明需要连接哪个.o或.obj文件(在这里是b.cpp生成的.o或.obj文件),此时,连接器会去这个.o或.obj文件中找在b.cpp中实现的函数,再把他们build到makefile中指定的那个可以执行文件中。
步骤包括:地址和空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定位(Relocation)等主要步骤

错误提示redefined:
编译器会在每个.o或.obj文件中都去找一下所需要的符号,而不是只在某个文件中找或者说找到一个就不找了。因此,如果在几个不同文件中实现了同一个函数,或者定义了同一个全局变量,链接的时候就会提示“redefined”。

cpp编译链接:
.cpp:编译器将.cpp编译成.obj,obj —就是编译单元一个程序,可以由一个或多个编译单元组成

.h:不被编译,只会在.cpp编译时候,根据include,将.h文件内容拷贝过来。

如果一个.cpp要用到另一个.cpp定义的函数怎么办? 只需在这个.cpp种写上他的函数声明,其余工作由链接器帮你完成,你可以随便调用该函数.

include头文件
1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。
#include <xxx.h>
2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。
#include “xxx.h”

头文件如何来关联源文件:
编译器预处理:
对#include命令进行“文件包含处理”:将file2.c的全部内容复制到#include “file2.c”处。这也正说明了,为什么很多编译器并不care到底这个文件的后缀名是什么----因为#include预处理就是完成了一个“复制并插入代码”的工作。
#include “a.h”实际上是引入相关声明,使得编译可以通过。

声明和定义:
一个变量声明必须同时满足两个条件,否则就是定义:
(1)声明必须使用extern关键字;
(2)不能给变量赋初值;
头文件请不要定义任何变量

extern 和 static:
一般不能允许在同一个程序中,出现两个一样的函数名或外部变量名.但c++可以通过一种叫做链接属性的关键字来限定,你这个函数是属于整个程序公用的,还是只是在一个编译单元obj里面使用的.

extern是外部链接的意思,也就是除了这个单元,外部的单元也是能够访问这个函数的.
static 是内部链接,自属于自己单元.

为何要先声明
在使用函数和变量的时候,必须将他声明,为何要声明?声明之后才知道他的规格,才能更好的发现不和规格的部分。所以说,只要使用到该函数的单元,就必须在之前的位置已经有声明存在

#include作用:
将指定的文件的内容,原封不动的拷贝进来.

#ifndef —#endif作用:
保证头文件被多个其他文件引用(include)时,内部的数据不会被多次定义而造成错误。
#ifndef B_H
#define B_H
内容
#endif //B_H
上面B_H可以任意的起名字,只是一个符号,表示这个符号如果还没有被宏定义的话,就定义它。这样,当b.h已经被include过以后,B_H相当于已经被宏定义过了,之后再被include,内容就不会再执行了。

比如:a.cpp、b.cpp(多个源文件)都包含 x.h同一个头文件:那么编译时候报错,它被重复定义;
include是拷贝的作用,就相当于拷贝了同一个东西多份;所以用#ifndef —#endif使得其中的内容只被拷贝一次。

过程:
一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,

在编 译(compile)时:不需要与其他文件互通,只需要保证自己能正确编译就行,
如何保证?调用 “void a()”函数之前,先声明一下这个函数“void a();”

什么时候互通? —链接时:编译生成目标文件与其他的目标文件做一次链接(link)

比如,在文件a.cpp中定义 了一个全局函数“void a() {}”,而在文件b.cpp中需要调用这个函数。即使这样,文件a.cpp和文件b.cpp并不需要相互知道对方的存在,而是可以分别地对它们进行编译, 编译成目标文件之后再链接,才会查找需要的这个函数的具体实现在哪里,整个程序就可以运行了。
在文件b.cpp中,在调用 “void a()”函数之前,先声明一下这个函数“void a();”,就可以了。这是因为编译器在编译b.cpp的时候会生成一个符号表(symbol table),像“void a()”这样的看不到定义的符号,就会被存放在这个表中。再进行链接的时候,编译器就会在别的目标文件中去寻找这个符号的定义。一旦找到了,程序也就可以 顺利地生成了。