构建网站需要多长时间和多少成本?设计色彩方面有哪些关键要素?

摘要:建设一个网站需要多久多少钱,网站设计 色彩,深圳外贸网站建设服务收费,不规则网站模板前言 在你工作过的系统里,不知能否看到类似下面的代码。 这好像没有什么问题,你应该还会想&
建设一个网站需要多久多少钱,网站设计 色彩,深圳外贸网站建设服务收费,不规则网站模板前言 在你工作过的系统里#xff0c;不知能否看到类似下面的代码。 这好像没有什么问题#xff0c;你应该还会想#xff1a;“嗯⋯是啊#xff0c;我们的代码都是这样写的#xff0c;从来没有因此碰到过什么麻烦啊#xff5e;”。 你说的没错#xff0c;如果你的头文件…前言 在你工作过的系统里不知能否看到类似下面的代码。 这好像没有什么问题你应该还会想“嗯⋯是啊我们的代码都是这样写的从来没有因此碰到过什么麻烦啊”。 你说的没错如果你的头文件从来没有被任何C程序引用过的话。 这与C有什么关系呢? 看看__cplusplus注意前面是两个下划线 的名字你就应该知道它与C有很大关系。__cplusplus是一个C规范规定的预定义宏。 你可以信任的是所有的现代C编译器都预先定义了它而所有C语言编译器则不会。另外按照规范__cplusplus的值应该等于1 9 9 7 1 1 L 然而不是所有的编译器都照此实现比如g编译器就将它的值定义为1。 所以如果上述代码被C语言程序引用的话它的内容就等价于下列代码。 在这种情况下既然extern C { }经过预处理之后根本就不存在那么它和#include指令之间的关系问题自然也就是无中生有。 extern C的前世今生 在C编译器里有一位暗黑破坏神专门从事一份称作“名字粉碎”(name mangling)的工作。当把一个C的源文件投入编译的时候它就开始工作把每一个它在源文件里看到的外部可见的名字粉碎的面目全非然后存储到二进制目标文件的符号表里。 之所以在C的世界里存在这样一个怪物是因为C允许对一个名字给予不同的定义只要在语义上没有二义性就好。 比如你可以让两个函数是同名的只要它们的参数列表不同即可这就是函数重载(function overloading)甚至你可以让两个函数的原型声明是完全相同的只要它们所处的名字空间(namespace)不一样即可。 事实上当处于不同的名字空间时所有的名字都是可以重复的无论是函数名变量名还是类型名。 另外C程序的构造方式仍然继承了C语言的传统编译器把每一个通过命令行指定的源代码文件看做一个独立的编译单元生成目标文件然后链接器通过查找这些目标文件的符号表将它们链接在一起生成可执行程序。 编译和链接是两个阶段的事情事实上编译器和链接器是两个完全独立的工具。编译器可以通过语义分析知道那些同名的符号之间的差别而链接器却只能通过目标文件符号表中保存的名字来识别对象。 所以编译器进行名字粉碎的目的是为了让链接器在工作的时候不陷入困惑将所有名字重新编码生成全局唯一不重复的新名字让链接器能够准确识别每个名字所对应的对象。 但 C语言却是一门单一名字空间的语言也不允许函数重载也就是说在一个编译和链接的范围之内C语言不允许存在同名对象。 比如在一个编译单元内部不允许存在同名的函数无论这个函数是否用static修饰在一个可执行程序对应的所有目标文件里不允许存在同名对象无论它代表一个全局变量还是一个函数。 所以C语言编译器不需要对任何名字进行复杂的处理或者仅仅对名字进行简单一致的修饰decoration比如在名字前面统一的加上单下划线_。 C的缔造者Bjarne Stroustrup在最初就把——能够兼容C能够复用大量已经存在的C库——列为C语言的重要目标。 但两种语言的编译器对待名字的处理方式是不一致的这就给链接过程带来了麻烦。 例如现有一个名为my_handle.h的头文件内容如下 然后使用C语言编译器编译my_handle.c生成目标文件my_handle.o。 由于C语言编译器不对名字进行粉碎所以在my_handle.o的符号表里这三个函数的名字和源代码文件中的声明是一致的。 随后我们想让一个C程序调用这些函数所以它也包含了头文件my_handle.h。 假设这个C源代码文件的名字叫my_handle_client.cpp其内容如下 其中粗体的部分就是那三个函数的名字被粉碎后的样子。 然后为了让程序可以工作你必须将my_handle.o和my_handle_client.o放在一起链接。由于在两个目标文件对于同一对象的命名不一样链接器将报告相关的“符号未定义”错误。 为了解决这一问题C引入了链接规范(linkage specification)的概念表示法为externlanguage stringC编译器普遍支持的language string有C和C分别对应C语言和C语言。 链接规范的作用是告诉C编译对于所有使用了链接规范进行修饰的声明或定义应该按照指定语言的方式来处理比如名字调用习惯calling convention等等。
阅读全文