㈠ 在c语言中,什么是预处理部分,预处理部分是不是也是头文件,即是不是包含文件预处理部分的作用是什么
预处理部分 是由编译器完成的,为编译代码提供方便。
㈡ C语言中 “编译时处理” 与 “预处理” 两个概念的区别
浩强哥的教材中说的很清楚,可以参考。简单来说,C语言程序在编译前,其实是有一个预备工作的,这个就是“预处理”,可以理解为:人类所编写的程序,需要转化为机器能够编译的合理输入文件。机器编译,就是按照语法来处理语句,一些语句或者逻辑是在编译时才有意义,才进行分析,这就是“编译时处理”。
㈢ c语言编译器哪个好
1.
GCC
大名鼎鼎的GNU的C/C++/Obj-C编译器,
当前版本是2.8.1,
但据说与2.7.*有兼容性
问题.
而使用较广的是gcc
2.7.2系列,
如RedHat5中带的就是gcc
2.7.2.3
有时候在Cyrix上用gcc会有些问题,
因此有一套针对Cyrix特点的gcc
2.7.2.3
我这里有RedHat5的rpms
ftp://166.111.68.98/pub/Warez-CD/Huricane-contrib
(Cyrix
2.7.2.3
&
2.8.1)
其基本结构就是一个front
end和back
end,
/usr/bin/gcc
就是个front
end,
其kernel东西都放在
/usr/lib/gcc-lib下面,
cpp是C预处理器,
cc1*的1M多的就是编译器的核心模块了
cc1
C
compiler
cc1plus
C++
compiler
cc1obj
Object-C
compiler
但gcc并没有集成Fortran的compiler,
一般要用f2c转成C后才用gcc编译
好象也还有个g77
Fortran
compiler吧?
gcc的不断发展完善使许多commercial
compiler都相形见绌,
那当然,
gcc/emacs
都由GNU创始人Richard
Stallman手创,
是GNU的旗舰产品,
质量当然没得说了:-)
由于
Unix平台的高度可移植性,
gcc几乎在各种常见的Unix平台上都有,
即使是
Win32/DOS也有gcc的port.
比如说该死的Solaris普通版本连compiler都没有,
也
就只好用gcc了...
2.
EGCS(Experimental/Enhanced
GNU
Compiler
System)
这是gcc的发展方向,
把fortran等编译器集成进来,
也许还会有Pascal?
它的构造很清晰,
把对gcc的各种改进/port都集成回去.
如gcc
2.7系列据说是
没有对Pentium进行优化的,
而egcs则把pgcc对Pentium的一些优化集成进去了
现在gcc的开发工作主要就是egcs,
由Cygnus公司领导(?),
这Cygnus公司还是很
不错的,
还出了GNU-Win32,
SourceNavigator等,
是GNU的坚实拥护者:-))
http://egcs.cygnus.com
包括了C/C++/Obj-C/Fortran
编译器,
当前最新版本1.0.2,
还在不断开发中
昨天download发现KDE
Beta4都用egcs编译了
:-)
Fortran集成进来后在/usr/lib/gcc-lib下又多了个f771的back
end,
当然
还是g77/f77
编译
我这里有egcs
1.0.2
的rpm
在RH5-CD/collect下面
3.
PGCC(Pentium
GCC)
http://www.gcc.ml.org
针对Pentium
CPU进行了编译器优化的compiler
pgcc据说用JPEG压缩解压缩测试最快可比gcc快
30%!
新版的pgcc都是基于egcs的,
以一个patch的形式release
㈣ 都有哪些好的c语言编译器阿
1. GCC
大名鼎鼎的GNU的C/C++/Obj-C编译器, 当前版本是2.8.1, 但据说与2.7.*有兼容性
问题. 而使用较广的是gcc 2.7.2系列, 如RedHat5中带的就是gcc 2.7.2.3
有时候在Cyrix上用gcc会有些问题, 因此有一套针对Cyrix特点的gcc 2.7.2.3
我这里有RedHat5的rpms ftp://166.111.68.98/pub/Warez-CD/Huricane-contrib
(Cyrix 2.7.2.3 & 2.8.1)
其基本结构就是一个front end和back end,
/usr/bin/gcc 就是个front end, 其kernel东西都放在 /usr/lib/gcc-lib下面,
cpp是C预处理器, cc1*的1M多的就是编译器的核心模块了
cc1 C compiler
cc1plus C++ compiler
cc1obj Object-C compiler
但gcc并没有集成Fortran的compiler, 一般要用f2c转成C后才用gcc编译
好象也还有个g77 Fortran compiler吧?
gcc的不断发展完善使许多commercial compiler都相形见绌, 那当然, gcc/emacs
都由GNU创始人Richard Stallman手创, 是GNU的旗舰产品, 质量当然没得说了:-)
由于 Unix平台的高度可移植性, gcc几乎在各种常见的Unix平台上都有, 即使是
Win32/DOS也有gcc的port. 比如说该死的Solaris普通版本连compiler都没有, 也
就只好用gcc了...
2. EGCS(Experimental/Enhanced GNU Compiler System)
这是gcc的发展方向, 把fortran等编译器集成进来, 也许还会有Pascal?
它的构造很清晰, 把对gcc的各种改进/port都集成回去. 如gcc 2.7系列据说是
没有对Pentium进行优化的, 而egcs则把pgcc对Pentium的一些优化集成进去了
现在gcc的开发工作主要就是egcs, 由Cygnus公司领导(?), 这Cygnus公司还是很
不错的, 还出了GNU-Win32, SourceNavigator等, 是GNU的坚实拥护者:-))
http://egcs.cygnus.com
包括了C/C++/Obj-C/Fortran 编译器, 当前最新版本1.0.2, 还在不断开发中
昨天download发现KDE Beta4都用egcs编译了 :-)
Fortran集成进来后在/usr/lib/gcc-lib下又多了个f771的back end, 当然
还是g77/f77 编译
我这里有egcs 1.0.2 的rpm 在RH5-CD/collect下面
3. PGCC(Pentium GCC)
http://www.gcc.ml.org
针对Pentium CPU进行了编译器优化的compiler
pgcc据说用JPEG压缩解压缩测试最快可比gcc快 30%!
新版的pgcc都是基于egcs的, 以一个patch的形式release
㈤ c++中的编译器和预处理器有何不同
元代码中,包含了两个部分的内容,
一个是对机器有用的东西,
一个是对人有用的东西,比如 注释。
预处理器就是 在编译之前,把代码整理一下,把一些没用的东西,给处理掉。做好准备工作后,然后再编译。
㈥ vc++中的预处理器定义是干什么用的
预处理(pre-treatment),是指在进行最后加工完善以前进行的准备过程,具体应用在不同的行业或领域,会有不同的解释。
在一些程序设计语言中,预处理是preprocessing的翻译。
含义
程序设计领域中,预处理一般是指在程序源代码被翻译为目标代码的过程中,生成二进制代码之前的过程。典型地,由预处理器(preprocessor) 对程序源代码文本进行处理,得到的结果再由编译器核心进一步编译。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的单位——(用C/C++的术语来说是)预处理记号(preprocessing token)用来支持语言特性(如C/C++的宏调用)。
C/C++预处理
最常见的预处理是C语言和C++语言。ISO C和ISO C++都规定程序由源代码被翻译分为若干有序的阶段(phase) [1] [2] ,通常前几个阶段由预处理器实现。预处理中会展开以#起始的行,试图解释为预处理指令(preprocessing directive) ,其中ISO C/C++要求支持的包括#if/#ifdef/#ifndef/#else/#elif/#endif(条件编译)、#define(宏定义)、#include(源文件包含)、#line(行控制)、#error(错误指令)、#pragma(和实现相关的杂注)以及单独的#(空指令)[1] [2] 。预处理指令一般被用来使源代码在不同的执行环境中被方便的修改或者编译。[3]
预处理器在UNIX传统中通常缩写为PP,在自动构建脚本中C预处理器被缩写为CPP的宏指代。为了不造成歧义,C++(cee-plus-plus) 经常并不是缩写为CPP,而改成CXX。
注意预处理常被错误地当作预编译(precompiling) ,事实上这是两个不同的概念。预处理尽管并不是ISO C/C++要求的单独阶段,但“预处理”这个术语正式地出现并参与构成其它术语,如C的预处理翻译单元(preprocessing translation unit)[1] 以及C/C++词法规则中预处理记号(prerprocessing-token) 这个语法分类[1] [2] 。预编译是一些编译器支持的特性,不是C/C++语言的特性或实现必须要求遵循的规则涉及到的内容,没有在ISO C/C++全文中出现[1] [2] 。
纺织物的预处理编辑
含义或目的
纺织物的预处理,是纺织物烧毛、退浆、精练、漂白、丝光和热定形等工艺过程的总称。预处理的目的是去除纱线或织物上的天然杂质,以及纺织过程中所附加的浆料、助剂和沾污物。经过预处理的纺织品具有较好的润湿性、白度、光泽和尺寸稳定性。天然纤维含杂较多,其纺织物的预处理要求也较高,天然纤维与化学纤维混纺织物的预处理工艺,应以适合天然纤维为主,同时照顾化学纤维的要求。
预处理过程
烧毛是烧去纱线或织物表面的茸毛,使织物表面光洁,增进染色或印花后的色泽鲜艳度,在服用过程中不易沾尘。化学纤维织物烧毛后,还可减轻因茸毛摩擦而引起的起球现象。
退浆、精练、漂白过程都是去除织物上的各种杂质,三者相辅相成,各有侧重。退浆以去除浆料为主,同时也可洗除部分水溶性天然杂质;精练是以去除纤维伴生的天然杂质为主,并可去除织物上残留的浆料等物质;漂白是以去除色素为主,并进一步去除精练后的残留杂质。棉、麻纤维织物大多要经过退浆,常用的有热水、碱液、淀粉酶、氧化剂等退浆法。精练对于棉纺织物非常重要,主要是通过烧碱液的作用去除果胶质、棉脂、棉蜡等天然杂质,并使棉籽壳残屑体解。棉纤维的漂白常用次氯酸钠或过氧化氢。苎麻纺织物的精练、漂白工艺和棉相似。亚麻纤维的吸水性较好,精练要求较棉为低,可用纯碱处理。亚麻纺织物的漂白常用较廉价的次氯酸钠酸性溶液处理,再用碱液洗除反应产物。漂白和碱处理可交替重复进行。羊毛精练通常是在原毛状态进行的,又称洗毛,主要是去除羊汗和羊脂。可用含碳酸钠和肥皂或洗涤剂的练液在50℃左右使羊脂乳化而洗除。羊毛纤维一般不经漂白过程,需要时用还原剂如二氧化硫、亚硫酸氢钠或连二亚硫酸钠进行漂白,但漂白效果不持久,在空气中会逐渐氧化而泛黄;用过氧化氢漂白剂效果较好。蚕丝织物的预处理主要是精练,目的是去除丝胶。脱胶用剂主要是肥皂液,可酌加碳酸钠。也可先用蛋白酶处理,再经肥皂液洗涤。丝纤维的色素等杂质主要集中在丝胶中,脱胶后一般不再漂白。需要漂白时通常采用过氧化氢为漂白剂。合成纤维含杂极少,织造时大多选用水溶性浆料,且用量较少,退浆常结合精练进行,处理的条件可较温和。锦纶织物用非离子型洗涤剂处理;漂白用剂以亚氯酸钠最宜,过氧化氢或次氯酸钠均易使纤维受损。涤纶虽然遇碱会水解,仍可用淡碱液作精练处理,但应严格控制温度和时间,漂白用剂以亚氯酸钠为最好,有时退浆、精练、漂白可同时完成。
丝光主要用于加工棉、麻纺织物。丝光过程的特点是纱线或织物浸渍浓烧碱液,使纤维发生溶胀,再在张力状态下洗去碱液,从而获得耐久性的光泽,有效地提高染料的上染率并有定形作用。
热定形主要用于受热后易收缩变形的锦纶或涤纶等合成纤维及其混纺物的加工。这些纺织物在染色或印花之前,一般都先在有张力的状态下用比后续工序为高的温度进行处理,以防止织物收缩变形。
工业水处理中预处理编辑
定义和组成
沼气在沼气池中发酵产生后
气体预处理
气体预处理
,里面会有大量的腐蚀性气体和对环境造成严重污染的气体(烷类气体、一氧化碳、二氧化碳、硫化气体等),对于发电机组和环境都是不能接受的,宾士预处理系统主要是为了保证燃气发电机组能够正常稳定的运行而设计生产的,沼气经过预处理系统后可以大大降低硫化物、水分及颗粒度。
在工业用水处理中,预处理工序的任务是将工业用水的水源——地表水、地下水或城市自来水处理到符合后续水处理装置所允许的进水水质指标,从而保证水处理系统长期安全、稳定地运行,为工业生产提供优质用水。
预处理的对象主要是水中的悬浮物、胶体、微生物、有机物、游离性余氯和重金属等。这些杂质对于电渗析、离子交换、反渗透、钠滤等水处理装置会产生不利的影响。 [4]
(一)悬浮物
在离子交换水处理中,进水的悬浮物会附着于交换剂颗粒表面,降低交换容量。
在电渗析水处理中,进水的悬浮物会黏附在膜表面上,成为离子迁移的障碍,增加膜电阻。
在钠滤、反渗透中,进水的悬浮物会堵塞膜的微孔,使透水率下降。
(二)有机物
在离子交换水处理中,有机物会污染阴离子交换树脂,使其交换容量下降,再生剂耗量增大,树脂使用寿命缩短。
在电渗析水处理中,水中带极性有机物被膜吸附后,会改变膜的极性,并使膜的选择透过性降低,膜电阻增加。
在反渗透、钠滤水处理中,有机物、胶体、悬浮物容易堵塞反渗透、钠滤膜的微孔,使透水率很快下降。
(三)微生物
水中的细菌转移到电渗析膜,在膜面上繁殖,会使膜电阻增加。
细菌、微生物对醋酸纤维素反渗透、纳滤膜有侵蚀作用。细菌繁殖会污染膜。
(四)游离性余氯
游离性余氯会使阳离子交换树脂或离子交换膜活性基团氧化分解,引起树脂或膜结构破坏。还会使反渗透聚酰胺膜性能恶化。
(五)铁、锰离子
铁、锰离子易被离子交换树脂吸附,且不易被再生剂取代,降低交换容量。也会使电渗析膜污染、中毒。铁、锰金属氧化物,其含量高时,在反渗透、纳滤膜表面易形成氢氧化物胶体,产生沉淀作用。
由于上述种种不利的影响,导致工业用水处理系统产水量减少,出水的水质下降,工作周期缩短,消耗指标上升,制水成本提高,树脂和膜的使用寿命缩短,并在操作管理上增加麻烦。
随着工农业的不断发展,城市人口的日益密集,有些污水未经处理排入江河,使水中有害物质日益增多。这就对工业用水的预处理提出了更高的要求。
㈦ C语言里面的预处理是什么意思
预处理功能主要包括:
宏定义,文件包含,条件编译三部分。
分别对应宏定义命令,文件包含命令,条件编译命令三部分实现。
预处理过程读入源代码,检查包含预处理指令的语句和宏定义,
并对源代码进行响应的转换。预处理过程还会删除程序中的注释
和多余的空白字符。
预处理指令是以#号开头的代码行。
#号必须是该行除了任何空白字符外的第一个字符。
#后是指令关键字,在关键字和#号之间允许存在任意
个数的空白字符。整行语句构成了一条预处理指令,
该指令将在编译器进行编译之前对源代码做某些转换。
指令用途
#空指令,无任何效果
#include包含一个源代码文件
#define定义宏
#undef取消已定义的宏
#if如果给定条件为真,则编译下面代码
#ifdef如果宏已经定义,则编译下面代码
#ifndef如果宏没有定义,则编译下面代码
#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个#if……#else条件编译块
#error停止编译并显示错误信息
#else条件编译的否则选项
#error指令将使编译器显示一条错误信息,然后停止编译。
#line指令可以改变编译器用来指出警告和错误信息的文件号和行号。
#pragma指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。文件包含
在程序中包含头文件有两种格式:
#include<my.h>
#include"my.h"
第一种方法是用尖括号把头文件括起来。
这种格式告诉预处理程序在编译器自带的或
外部库的头文件中搜索被包含的头文件。
第二种方法是用双引号把头文件括起来。
这种格式告诉预处理程序在当前被编译的
应用程序的源代码文件中搜索被包含的头文件,
如果找不到,再搜索编译器自带的头文件。
采用两种不同包含格式的理由在于,编译器是
安装在公共子目录下的,而被编译的应用程序
是在它们自己的私有子目录下的。一个应用程序
既包含编译器提供的公共头文件,也包含自定义
的私有头文件。采用两种不同的包含格式使得编
译器能够在很多头文件中区别出一组公共的头文件。
举个例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineSIX6
#defineSEVEN7
#defineCube(x)(x)*(x)*(x)
#defineVERSION"tzs"
#definePASTE(n)"最终胜利者是:"#n
#defineNUM(a,b,c)a##b##c
#defineSTR(a,b,c)a##b##c
#defineDEBUG1
intmain()
{
inti;
i=SIX+SEVEN;
printf("i=%d ",i);
i=(SIX*SEVEN);
printf("i=%d ",i);
i=Cube(3);
printf("i=%d ",i);
printf("%s",VERSION);
printf("%s",PASTE(桃子));
puts(PASTE(yy/));
puts(PASTE(xx));
printf("%d ",NUM(1,2,3));
//printf("%s ",STR("aa","bb","cc"));
#ifDEBUG
printf("Debugging ");
printf("Debugging2222 ");
#endif
printf("Running ");
#ifdefinedDEBUG
printf("yes ");
#endif
#if!definedJJ
printf("noJJ ");
#endif
}
㈧ 预处理命令不是C语言本身的组成部分,那它属于什么
属于编译器的命令,优化这一类的
㈨ 预处理命令不是C语言本身的组成部分,那它属于什么
他不属于C语言本身,是编译程序不能识别他们,所以必须在对程序进行通常的编译之前对程序中的特殊命令进行预处理。