当前位置:文档之家› #ifndef的用法

#ifndef的用法

#ifndef的用法
#ifndef的用法

定义

#ifndef x

#define x

...

#endif

这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。

#ifndef x

//先测试x是否被宏定义过

#define x

//如果没有宏定义下面就宏定义x并编译下面的语句

...

#endif

//如果已经定义了则编译#endif后面的语句

条件指示符#ifndef检查预编译常量在前面是否已经被宏定义。如果在前面没有被宏定义,则条件指示符的值为真,于是从#ifndef到#endif之间的所有语句都被包含进来进行编译处理。相反,如果#ifndef指示符的值为假,则它与#endif指示符之间的行将被忽略。条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。

补充一些内容

千万不要忽略了头件的中的#ifndef,这是一个很关键的东西。比如你有两个C 文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。

还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:

#ifndef <标识>

#define <标识>

......

#endif

<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h

#ifndef _STDIO_H_

#define _STDIO_H_

......

#endif

#ifndef xxx//如果没有定义xxx

#define xxx//定义xxx

#endif //结束如果

这个用法主要是在头文件中,主要是为了防止类重复的include,所以在类的头文件之前加上前面两个,用类名替代xxx,在最后加上最后一句。

const 与#define的比较

C++ 语言可以用const来定义常量,也可以用#define来定义常量。但是前者比后者有更多的优点:

(1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

【规则5-2-1】在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。

英语单词惯用法集锦解析

英语单词惯用法集锦 习惯接动词不定式的动词(V to inf) adore(vi极喜欢) dread (vt.不愿做,厌恶)plan 计划 afford(+to,vt有条件,能承担)endeavour (vt,竭力做到,试图或力图)prefer(vt.宁可;宁愿(选择);更喜欢)agree 同意endure(忍受.cannot ~ to) prepare准备 aim (vi[口语]打算:) engage (vi.保证,担保;) presume(vt.冒昧;敢于[用于第一人称时为客套话]:) appear (vi.似乎;显得) essay(vt.尝试,试图) pretend(vt.自命;自称;敢于;妄为) apply (申请)expect(期望,希望)proceed(开始,着手,)arrange (vi.做安排,(事先)筹划)fail (vt.未做…;疏忽)promise(许诺,保证做 ask (要求)forget (vt. 忘记)purpose (vt.决心,打算) beg (vt.正式场合的礼貌用语]请(原谅),请(允许):I beg to differ.恕我不能赞同)guarantee(保证,担保)refuse(拒绝)bear 承受,忍受hate([口语]不喜欢;不愿意;)regret (vt. 抱歉;遗憾)begin help (有助于,促进)remember(记住) bother (vi.通常用于否定句]麻烦,费心)hesitate(vi.犹豫;有疑虑,不愿)scheme(策划做)care (vt.想要;希望;欲望[后接不定式,常用于否定、疑问及条件句中])hope (vt.希望,盼望,期待)seek(vt.谋求,图谋[后接不定式]) cease (停止; 不再(做某事)[正式] intend (打算;想要)seem(似乎,好像[后接不定式或从句];觉得像是,以为[ choose (意愿;选定;决定)itch start开始claim (vt. 主张;断言;宣称) continue (继续)like 喜欢swear(vt.起誓保证;立誓要做(或遵守) dare (vt.敢,敢于,勇于,胆敢)long(vi.渴望;热望;极想) decline(vt.拒绝,拒不(做、进入、考虑等) manage(设法完成某事)threaten(vt.威胁,恐吓,恫吓)deign (屈尊做)mean(有意[不用进行时)trouble(vi.费心,费神;麻烦)demand(vi.要求,请求:)need (需要)try(设法做) deserve (应得) neglect (疏忽) undertake(承诺,答应,保证) desire (希望渴望)offer(表示愿意(做某事),自愿;)venture(冒险(做某事))determine(vi.决心,决意,决定,)omit (疏忽,忘记)want 想要 die (誓死做)pine (渴望)wish (希望) 习惯接“疑问词+动词不定式”的动词(有时也包括VN wh-+to do) advise 建议explain 解释perceive 觉察,发觉 answer 答复find 得知,察觉persuade 说服,劝说;使某人相信 ask 询问,问forget 忘记phone 打电话 assure 保证guess 臆测,猜度pray 祈祷 beg 请求,恳求hear 小心聆听(法庭案件)promise 允诺 conceive 想象,设想imagine 以为,假象remember记得 consider 考虑,思考indicate 暗示remind 提醒,使想起 convince 使相信inform告知通知instruct告知,教导 see 看看,考虑,注意decide 解决,决定know 学得,得知 show 给人解释;示范;叙述;discover发现;知道learn 得知,获悉 signal以信号表示doubt 怀疑,不相信look 察看;检查;探明 strike 使想起;使突然想到;使认为suggest 提议,建议tell 显示,表明;看出,晓得;warn 警告,告诫think 想出;记忆,回忆;想出,明白wonder 纳闷,想知道 wire 打电报telegraph 打电报 习惯接动名词的动词(包括v+one’s/one+v+ing) acknowledge 认知,承认…之事实escape免除,避免omit疏忽,忽略 admit 承认,供认excuse 原谅overlook 放任,宽容,忽视adore (非正式)极为喜欢fancy 构想,幻想,想想postpone 延期,搁置 advise 劝告,建议finish完成prefer较喜欢 appreciate 为…表示感激(或感谢)forbid 不许,禁止prevent预防 avoid 逃避forget 忘记prohibit 禁止,妨碍

#ifdef的用法

#ifdef的用法 头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include 了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef <标识> #define <标识> ...... ...... #endif <标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h #ifndef _STDIO_H_ #define _STDIO_H_ ...... #endif (2) 灵活使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。 代码举例:新建define.cpp文件 #include "iostream.h" int main() { #ifdef DEBUG cout<< "Beginning execution of main()"; #endif return 0; } 运行结果为:Press any key to continue 改写代码如下: #include "iostream.h" #define DEBUG int main() {

#ifdef DEBUG cout<< "Beginning execution of main()"; #endif return 0; } 运行结果为:Beginning execution of main() Press any key to continue 更一般的情况是,#define语句是包含在一个特定的头文件中。 比如,新建头文件head.h,在文件中加入代码: #ifndef DEBUG #define DEBUG #endif 而在define.cpp源文件中,代码修改如下: #include "iostream.h" #include "head.h" int main(){ #ifdef DEBUG cout<< "Beginning execution of main()"; #endif return 0; } 运行结果如下:Beginning execution of main() Press any key to continue 结论:通过使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。 (3) 如果你的程序由几个文件组成,而且有两个以上的文件都要包含同一个文件,为了避免重复包含同一个文件,所以在要被包含多次的文件中用#ifdef。 #ifdef 就是说if define,(如果定义了) 就像if else语句一样 /*试举一个例子: 如果想编写一个既可用TC 编译又可用VC 编译的程序,但不同的编译器生成的可执行文件的功能不同时, #ifdef 就有用了. 下面这个程序,如果用VC 编译,只会显示一句话; 但若用TC 编译,既显示一句话,又把背景颜色改为蓝色。 这样做的原因是VC 没有textbackground() 这个函数, 为了不改变源程序而适应不同的编译器, 这种条件编译(conditional compilation)的方法比较有用. 另外,有些Windows API 对操作系统的版本有要求,这时条件编译又可派上用场了. */

“的、地、得”用法分析及练习(后附答案)

“的、地、得”用法分析及练习(后附答案) 一、的、地、得用法分析: “的”后面跟的都是表示事物名称的词或词语,如:敬爱的总理、慈祥的老人、戴帽子的男孩、珍贵的教科书、鸟的天堂、伟大的祖国、有趣的情节、优雅的环境、可疑的情况、团结友爱的集体、他的妈妈、可爱的花儿、谁的橡皮、清清的河水...... “地”后面跟的都是表示动作的词或词语,如:高声地喊、愉快地唱、拼命地逃、疯狂地咒骂、严密地注视、一次又一次地握手、迅速地包围、沙沙地直响、斩钉截铁地说、从容不迫地申述、用力地踢、仔细地看、开心地笑笑......” “得”前面多数是表示动作的词或词语,少数是形容词;后面跟的都是形容事物状态的词或词语,表示怎么怎么样的,如:走得很快、踩得稀烂、疼得直叫唤、瘦得皮包骨头、红得发紫、气得双脚直跳、理解得十分深刻、乐得合不拢嘴、惊讶得目瞪口呆、大得很、扫得真干净、笑得多甜啊...... 二、的、地、得用法补充说明: 1、如果“de”的后面是“很、真、太”等这些词,十有八九用“得”。 2、有一种情况,如“他高兴得一蹦三尺高”这句话里,后面的“一蹦三尺高”虽然是表示动作的,但是它是来形容“高兴”的程度的,所以也应该用“得”。

三、的、地、得用法总结: 1、“的”前面的词语一般用来修饰、限制“的”后面的事物,说明“的”后面的事物怎么样。结构形式一般为:修饰、限制的词语+的+名词。 2、“地”前面的词语一般用来形容“地”后面的动作,说明“地”后面的动作怎么样。结构方式一般为:修饰、限制的词语+地+动词。 3、“得”后面的词语一般用来补充说明“得”前面的动作怎么样,结构形式一般为:动词(形容词)+得+补充、说明的词语。 四、的、地、得用法例句: 1. 蔚蓝色的海洋,波涛汹涌,无边无际。 2. 向日葵在微风中向我们轻轻地点头微笑。 3. 小明在海安儿童公园玩得很开心。 五、“的、地、得”的读音: “的、地、得”是现代汉语中高频度使用的三个结构助词,都起着连接作用;它们在普通话中都各自有着各自的不同的读音,但当他们附着在词,短语,句子的前面或后面,表示结构关系或某些附加意义的时候都读轻声“de”,没有语音上的区别。 但在书面语中有必要写成三个不同的字,这样可以区分他们在书面语用法上的不同。这样做的好处,就是可使书面语言精确化。

常见动词用法

1、keep ①keep + 形容词表示“保持” Please keep quite. 请保持安静。 ②keep + 宾语+ 形容词(或介词短语)表示“把……保持在某一状态” We must do everything we can to keep the air clean. 我们必须尽一切所能保持空气清洁。 ③keep sb doing sth 表示“让某人做某事” ——只能用现在分词作宾语补足语,不能用不定式。 He kept us waiting for two hours. 他让我们等了两个小时。 He kept us to wait for two hours. (错误) ④keep on doing sth和keep doing sth 表示“继续做某事,反复做某事”,可换用。 但keep on doing 更强调动作的反复性或做事人的决心。 He keeps on phoning me, but I don’t want to talk to him. Though he failed 3 times, he kept on trying. 他老是给我打电话,但我不想同他讲话。虽然他已失败了3次,但他仍继续干下去。 keep doing sth 经常用于静态动词。 He kept lying in bed all day long. 他整天都躺在床上。 ⑤keep …from doing sth 表示“阻止,使免于” He kept them from fishing in the lake. 他不让他们在那个湖里捕鱼。 2、may not / mustn’t / needn’t / wouldn’t ①may not be 是may be的否定式,意为“可能不是,也许不是” He may be there.他可能在那里。He may not be there.他可能不在那里。 ②must 意为“必须”,mustn’t 意为“千万不可,绝对不可” 所以Must we/I ……?的否定回答要用needn’t—意为“不必” -Must we get there before 11 o’clock? -No, we needn’t. ③wouldn’t = would not 意为“不会,不愿” I wouldn’t say no. 3、do ①do表示“做”,做某事,常指某种不具体的活动;make表示“制作”,指做出某种具体的东西。

C++ #pragma code_seg用法

#pragma code_seg 格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节,如果code_seg 没有带参数的话,则函数存放在.text节中。 push (可选参数)将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数)将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名identifier(可选参数)当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数)表示函数存放的节名 例如: //默认情况下,函数被存放在.text节中 void func1() {// stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(".my_data1") void func2() {// stored in my_data1 } //r1为标识符,将函数放入.my_data2节中 #pragma code_seg(push, r1, ".my_data2") void func3() {// stored in my_data2 } int main() { } 例如 #pragma code_seg(“PAGE”) 作用是将此部分代码放入分页内存中运行。 #pragma code_seg() 将代码段设置为默认的代码段 #pragma code_seg("INIT") 加载到INIT内存区域中,成功加载后,可以退出内存

动词以及动词短语的用法(动词后加to do 还是doing)

一动词加-ing 的情况 consider, suggest/advise,look forward to, excuse/pardon admit,delay/put off,fancy avoid,miss,keep/keep on,practise deny,finish,enjoy/appreciate forbid,imagine,risk can't help,mind,allow/permit,escape 考虑建议盼原谅, 承认推迟没得想. 避免错过继续练, 否认完成就欣赏. 禁止想象才冒险, 不禁介意准逃亡. 如:建议:advise,suggest,冒险:risk,献身:devote oneself to 二动词后加doing 和加to do sth. 意思不一样的情况 ①remember doing指记住过去做过的事,remember to do指记住将来要做的事,表示“不要忘记”。 ②forget doing表示忘记过去做过的事,forget to do表示“没有想起做某事”。 ③mean doing表示“意味着做某事”,mean to do表示“打算做某事”。 ④regret doing表示对已做过的事感到后悔,regret to do表示对将要做的事表示遗憾。 ⑤stop doing表示“停止做某事”,stop to do是停止做正在做的事以便去做另外一件事,这里的to do不是stop的宾语而是stop的目的状语。 ⑥try doing表示“尝试做某事”,try to do表示“设法、试图做某事”。 ⑦go on doing表示继续做同一件事,go on to do表示做完一件事后,接下去做另外一件事。 三动词后加to do sth. afford负担得起agree同意appear似乎,显得arrange安排 ask问attempt企图beg请求begin开始 choose选择claim要求decide决定demand要求 desire愿望determine决定expect期望fail不能 forget忘记happen碰巧hate憎恨,厌恶hesitate犹豫 hope希望intend想要learn学习long渴望 love爱manage设法mean意欲,打算need需要 neglect忽视offer提供omit忽略,漏other扰乱;烦恼

C++头文件防止重复定义的用法总结

许多头文件中都有#ifndef XXX_H #define XXX_H #endif XXX_H.请问我什么要这么定义?XXX_H有是什么东西? rt. 据我所知是为了防止重复定义.好比一个 .h ,可能会在好几 个 .cpp 中被 include 进来. 这样就会产生重复定义.这样就能解决这个问题啦. 这样主要是为了避免重复编译头文件。 一般是这样的形式 #ifndef XXXXX_H // 如果没有定义 XXXXX_H #defined XXXXX_H // 先定义 XXXXX_H,那么下一次编译到这个头文件的时候上一句条件不成立,下面的内容就不会再编译了。 // 头文件中的代码 #endif 在 C++ 中,可以用 #pragma once 来代替 即使用了 #pragma once 之后就可以不用那么麻烦去判断有没有编译过这个头文件了,那个由编译器自己判断了。 请问楼上的: 1,#pragma once怎么用啊? 2,如果我写一个类。myString.h 其中实现在myString.cpp中,请问:我应该把 #ifndef XXXXX_H #defined XXXXX_H #endif 写在myString.h myString.cpp的那个文件中呢? #pragma once 直接放在文件开始的地方就可以了 放在myString.h中

防止重复定义 写在myString.h的开头 也就是判断myString.h里那个类定义了没 已经定义的话就跳过#defined 直接#endif 可以看看msdn里面的说法... #ifndef ABC_H #define ABC_H ...................... #endif 条件指示符#ifndef检查ABC_H在前面是否已经被定义这里ABC_H是一个预编译器常量. 习惯上预编译器常量往往被写成大写字母.如果ABC_H在前面没有被定义则条件指示符的值为真 于是从#ifndef 到#endif 之间的所有语句都被包含进来进行处理相反如果#ifndef 指示符的值为假 则它与#endif 指示符之间的行将被忽略. 为了保证头文件只被处理一次, 把如下#define 指示符 #define ABC_H 放在#ifndef后面这样在头文件的内容第一次被处理时ABC_H将被定义 从而防止了在程序文本文件中以后#ifndef 指示符的值为真. 只要不存在两个必须包含的头文件要检查一个同名的预处理器常量这样的情形这 个策略就能够很好地运作. 可参考《C程序设计语言(K&R)》,《C++程序设计语言 (B_S)》,《C++ Primer(Lippman)》 是为了防止重复定义. 主要是用来解决重复定义的问题,在C++中函数和变量之类的只能被定义一次. #pragma once window的东西不公用

pretend三种易混淆不定式的用法

pretend三种易混淆不定式的用法 今天给大家带来了pretend三种易混淆不定式的用法,我们一起来学习吧,下面就和大家分享,来欣赏一下吧。 pretend三种易混淆不定式的用法 1. pretend to do sth .这个短语的意思是假装(将要)去做什么事情,适用于将来时态动作将来假装要去做但不一定去做的状态。 举例: If youpretend to know what you dont know,youll only make afool of yourself.不懂装懂就会闹笑话。(suri的回答) Child pretend to be mother and father in kindergarten.孩子在幼稚园里面假扮父亲和母亲(表将来)(JasoOon的回答) 2. pretend to have done sth .这个短语的意思是假装已经做过了某事,强调事情的一个完成的状态,侧重于假装的事情已经做好了。 举例:I pretend tohave seen nothing,but I cant.我假装自己没有看到任何东西,但是我做不到(侧重于一个完成时态,已经试图去假装没有看到)

she pretended to have finished the homeworkwhen she went out and played.当她出门玩的时候她假装自己已经完成了家庭作业。(假装做作业这个动作已经在出门玩之前做完了)(JasoOon的回答)以及怀陌的回答:When the teacher came in,he pretended to havefinished the homework.当老师进来的时候他假装自己已经完成家庭作业了,两者有异曲同工之妙。 3. pretendtobe doing sth 这个短语的意思是假装正在做某事,强调动作的一个进行时态。 举例:They pretend to be reading books when the teacher sneakingly stands at the back door.当老师偷偷地站在后门的时候他们假装正在读书(读书与老师站在后门都是过去进行时 态)(JasoOon的回答) Asmanypeople do,youoftenpretend to be doingwork when actuallyyou arejust wasting time online.像很多人一样,你经常假装正在工作,其实是在上网。 群主补充:昨天和今天已提交作业的同学,做得都很好,全部授予小红花。希望你们再接再厉,不要松懈哟。所以下周一出题者为所有已提交作业的同学或者你们选出的代表。

c语言预处理命令之条件编译(ifdefelseendifif等)

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等) 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。 预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令: 指令用途 #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif结束一个#if……#else条件编译块 #error停止编译并显示错误信息 一、文件包含 #include预处理指令的作用是在指令处展开被包含的文件。包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。标准C编译器至少支持八重嵌套包含。

预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。例如: #defineAAA #include"t.c" #undefAAA #include"t.c" 为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。例如: /*my.h*/ #ifndefMY_H #defineMY_H …… #endif 在程序中包含头文件有两种格式: #include #include"my.h" 第一种方法是用尖括号把头文件括起来。这种格式告诉预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件。第二种方法是用双引号把头文件括起来。这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索编译器自带的头文件。 采用两种不同包含格式的理由在于,编译器是安装在公共子目录下的,而被编译的应用程序是在它们自己的私有子目录下的。一个应用程序既包含编译器提供的公共头文件,也包含自定义的私有头文件。采用两种不同的包含格式使得编译器能够在很多头文件中区别出一组公共的头文件。

C++ #pragma预处理命令

#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma 指令: #pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样。 #pragma comment(linker,"/ENTRY:main_function") 表示指定链接器选项/ENTRY:main_function #pragma once 表示这个文件只被包含一次 #pragma warning(disable:4705) 表示屏蔽警告4705 C和C++程序的每次执行都支持其所在的主机或操作系统所具有的一些独特的特点。例如,有些程序需要精确控制数据存放的内存区域或控制某个函数接收的参数。#pragma为编译器提供了一种在不同机器和操作系统上编译以保持C和C++完全兼容的方法。#pragma是由机器和相关的操作系统定义的,通常对每个编译器来说是不同的。 如果编译器遇到不认识的pragma指令,将给出警告信息,然后继续编译。Microsoft C and C++ 的编译器可识别以下指令:alloc_text,auto_inline,bss_seg,check_stack,code_seg,comment,component,conform,const_seg,data_seg,deprecated,fenv_access,float_control,fp_contract,function,hdrstop,include_alias,init_seg,inline_depth,inline_recursion,intrinsic,make_public,managed,message,omp,once,optimize,pack,pointers_to_members,pop_macro,push_macro,region, endregion,runtime_checks,section,setlocale,strict_gs_check,unmanaged,vtordisp,warning。其中conform,init_seg, pointers_to_members,vtordisp仅被C++编译器支持。 以下是常用的pragma指令的详细解释。 1.#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef 则是基于宏的。

#pragma data code ICCAVR的使用

#pragma data:code 在Keil中为了节省数据存储器的空间,通过“code”关键字来定义一个数组或字符串将被存储在程序存储器中: uchar code buffer[]={0,1,2,3,4,5}; uchar code string[]="Armoric" ; 而这类代码移值到ICCAVR上时是不能编译通过的。我们可以通过"const" 限定词来实现对存储器的分配: #pragma data:code const unsigned char buffer[]={0,1,2,3,4,5}; const unsigned char string[]="Armoric"; #pragma data:data 注意: 《1》使用ICCAVR6.31时,#pragma data :code ;#pragma data:data ; 这些语法时在"data:cod"、"data:data"字符串中间不能加空格,否则编译不能通过。 《2》const 在ICCAVR是一个扩展关键词,它与ANSIC标准有冲突,移值到其它的编译器使用时也需要修改相关的地方。 在ICCAVR中对数组和字符串的五种不同空间分配: const unsigned char buffer[]={0,1,2,3,4,5}; //buffer数组被分配在程序存储区中 const unsigned char string[]="Armoric" ; //stringp字符串被分配在程序存储区中 const unsigned char *pt //指针变量pt被分配在数据存储区中,指向程序存储区中的字符类型数据 unsigned char *const pt //指针变量pt被分配在程序存储区中,指向数据存储区中的字符类型数据 const unsigned char *const pt //指针变量pt被分配在程序存储区,指向程序存储区中的字符类型数据 unsigned char *pt //指针变量pt被分配在数据存储区中,指向数据存储区中的数据 请问#pragma data:code和#pragma data:data是什么意思? 前者表示:随后的数据将存贮在程序区,即FLASH区,此区只能存贮常量,比如表格之类。

标点符号用法分析

标点符号用法 一、标点符号 标点符号:辅助文字记录语言的符号,是书面语的有机组成部分,用来表示语句的停顿、语气以及标示某些成分(主要是词语)的特定性质和作用。 句子:前后都有较大停顿、带有一定的语气和语调、表达相对完整意义的语言单位。 复句:由两个或多个在意义上有密切关系的分句组成的语言单位,包括简单复句(内部只有一层语义关系)和多重复句(内部包含多层语义关系)。 分句:复句内两个或多个前后有停顿、表达相对完整意义、不带有句末语气和语调、有的前面可添加关联词语的语言单位。 陈述句:用来说明事实的句子。 祈使句:用来要求听话人做某件事情的句子。 疑问句:用来提出问题的句子。 感叹句:用来抒发某种强烈感情的句子。 词语:词和短语(词组)。词,即最小的能独立运用的语言单位。短语,即由两个或两个以上的词按一定的语法规则组成的表达一定意义的语言单位,也叫词组。 二、分类 标点符号分为点号和标号两大类。

点号的作用是点断,主要表示说话时的停顿和语气。点号又分为句末点号和句内点号。 句末点号用在句末,表示句末停顿和句子的语气,包括句号、问号、叹号。 句内点号用在句内,表示句内各种不同性质的停顿,有逗号、顿号、分号、冒号。 标号的作用是标明,主要标示某些成分(主要是词语)的特定性质和作用。包括引号、括号、破折号、省略号、着重号、连接号、间隔号、书名号、专名号、分隔号。 (一)句号 1.用于句子末尾,表示陈述语气。使用句号主要根据语段前后有较大停顿、带有陈述语气和语调,并不取决于句子的长短。 2.有时也可表示较缓和的祈使语气和感叹语气。 请您稍等一下。 我不由地感到,这些普通劳动者也是同样值得尊敬的。 (二)问号 主要表示句子的疑问语气。形式是“?”。 1.用于句子末尾,表示疑问语气(包括反问、设问等疑问类型)。使用问号主要根据语段前后有较大停顿、带有疑问语气和语调,并不取决于句子的长短。 2.选择问句中,通常只在最后一个选项的末尾用问号,各个选项之间一般用逗号隔开。当选项较短且选项之间几乎没有停顿时,选项之间可不用逗号。当选项较多或较长,或有意突出每个选项的独立性时,也可每个选项之后都用问号。 3.问号也有标号的用法,即用于句内,表示存疑或不详。 马致远(1250?―1321)。 使用问号应以句子表示疑问语气为依据,而并不根据句子中包含有疑问词。当含有疑问词的语段充当某种句子成分,而句子并不表示疑问语气时,句末不用问号。

英语语法用法顺口溜(巧记)

英语语法顺口溜(巧记). 英语学习 动词为纲“滚雪球” 难易编组抓循环 同类归纳印象深图示介词最直观 混淆多因形音义反义词语成对念 构词方法不可忘习惯用语集中练 词不离句法最好课外阅读莫间断 be 的用法口诀 我用am,你用are,is连着他,她,它; 单数名词用is,复数名词全用are。 变疑问,往前提,句末问号莫丢弃。 变否定,更容易,be后not莫忘记。 疑问否定任你变,句首大写莫迟疑。 时间名词前所用介词的速记歌 年月周前要用in,日子前面却不行。 遇到几号要用on,上午下午又是in。 要说某日上下午,用on换in才能行。 午夜黄昏须用at,黎明用它也不错。 at也用在明分前,说“差”可要用上to, 说“过”只可使用past,多说多练牢牢记, 莫让岁月空蹉跎。 记住f(e)结尾的名词复数 妻子持刀去宰狼,小偷吓得发了慌; 躲在架后保己命,半片树叶遮目光。 巧记48个国际音标 单元音共十二,四二六前中后。 双元音也好背,合口集中八个整。 辅音共计二十八,八对一清又七浊, 四个连对也包括。有气无声清辅音, 有声无气浊辅音,发音特点应掌握。 非谓语动词的一些特殊用法后只接不定式作宾语的一些常用特殊谓语动词动词后,不定式,want, hope和wish, agree, decide, mean, manage, promise, expect, pretend,且说两位算在此, 要记牢,要记住,掌握它们靠自己。

英语学习小窍门 后接动词不定式做宾语补足语省略不定式符号“to”的一些常用特殊动词 一些动词要掌握,have, let和make, 此三动词是使役,“注意”“观察”“听到”see, 还有feel和watch,使用它们要仔细, 后接“宾补”略去“to”,此点千万要牢记 除此之外,还可以掌握“八字言”, 一感feel,二听hear, listen to, 三让have, let, make,四看see, look at, observe, watch 后只接动名词做宾语的一些常用特殊动词 特殊动词接“动名”,使用它们要记清, “放弃”“享受”可“后悔”, “坚持”“练习”必“完成”, “延期”“避免”非“介意” 掌握它们今必行。 动名词在句中的功能及其它 “动名”语法其功能,名词特征有动、形,主宾表定都可作,“动名”、“现分”要认清,“现分”不作“宾”和“主”, 动名作“状”可不行。二词皆可作定语,混为一谈不允许,主谓关系视分词,“动名”一词无此义。 现在分词形式及在句子中的作用(包括过去分词的作用): 现在分词真好记,动词后面ING。它的作用真不小,可以充当定状表。 还有宾语补足语,忘记此项不可以。 分词做定语的位置及其它 “定分”位置有二条,词前词后定分晓。 单个分词在词前,有时此规有颠倒。 分词短语在词后,“定从”和它互对照。 “现分”动作进行时,“过分”动作完成了。 (注:“定分”:做定语的分词;“定从”:定语从句;“现分”:现在分词;“过分”:过去分词。) 分词做状语在句子中所表示的意义 分词做状语,概有七意义。“ 时间”和“原因”,“结果”与“目的”。 “方式”加“伴随”,“条件”常出席。 且谈其主语,谓语头前的*。 欲要记住它,必须常练习。(*指句子的主语)

define用法以及

#define用法以及#define和typedef区别1.简单的define定义 #define MAXTIME 1000 2.define的“函数定义” define可以像函数那样接受一些参数,如下 #define max(x,y) (x)>(y)?(x):(y); 因为这个“函数”没有类型检查,就好像一个函数模板似的,没有模板那么安全就是了。 但是这样做的话存在隐患,例子如下: #define Add(a,b) a+b;如果遇到如:c * Add(a,b) * d的时候就会出现问题。 另外举一个例子: #define pin (int*); pin a,b; 本意是a和b都是int型指针,但是实际上变成int* a,b; a是int型指针,而b是int型变量。 这时应该使用typedef来代替define,这样a和b就都是int型指针了。 我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。 3.宏的单行定义(少见用法) #define A(x) T_##x #define B(x) #@x #define C(x) #x 我们假设:x=1,则有: A(1)------〉T_1 B(1)------〉'1' C(1)------〉"1" 4.define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

#define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* (no trailing ; ) */ 关键是要在每一个换行的时候加上一个"\" 5.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。 就是: #ifdef WINDOWS ...... ...... #endif #ifdef LINUX ...... ...... #endif 可以在编译的时候通过#define设置编译环境。 6.如何定义宏、取消宏 #define [MacroName] [MacroValue] //定义宏 #undef [MacroName] //取消宏 #define PI (3.1415926) //普通宏 #define max(a,b) ((a)>(b)? (a),(b)) //带参数的宏 7.条件编译 #ifdef XXX…(#else) … #endif 例如 #ifdef DV22_AUX_INPUT #define AUX_MODE 3

pragma的用法

#pragma的用法 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义, 编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para。其中para为参数,下面来看一些常用的参数。 1)message 参数 message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message("消息文本") 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有 没有正确的设置这些宏, 此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏, 可以用下面的方法: #ifdef _X86 #pragma message("_X86 macro activated!") #endif 我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示"_86 macro activated!"。 我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。 (2)另一个使用得比较多的pragma参数是code_seg 格式如: #pragma code_seg( ["section-name" [, "section-class"] ] ) 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到 它。 (3)#pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上 在VC6中就已经有了, 但是考虑到兼容性并没有太多的使用它。 (4)#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以 加快链接的速度, 但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文

定语从句用法分析

定语从句用法分析 定语从句在整个句子中担任定语,修饰一个名词或代词,被修饰的名词或代词叫先行词。定语从句通常出现在先行词之后,由关系词(关系代词或关系副词)引出。 eg. The boys who are planting trees on the hill are middle school students 先行词定语从句 #1 关系词: 关系代词:who, whom, whose, that, which, as (句子中缺主要成份:主语、宾语、定语、表语、同位语、补语), 关系副词:when, where, why (句子中缺次要成份:状语)。 #2 关系代词引导的定语从句 关系代词引导定语从句,代替先行词,并在句中充当主语、宾语、定语等主要成分。 1)who, whom, that 指代人,在从句中作主语、宾语。 eg. Is he the man who/that wants to see you?(who/that在从句中作主语) ^ He is the man who/whom/ that I saw yesterday.(who/whom/that在从句中作宾语) ^ 2)whose 用来指人或物,(只用作定语, 若指物,它还可以同of which互换)。eg. They rushed over to help the man whose car had broken down. Please pass me the book whose cover is green. = the cover of which/of which the cover is green. 3)which, that指代物,在从句中可作主语、宾语。 eg. The package (which / that)you are carrying is about to come unwrapped. ^ (which / that在从句中作宾语,可省略) 关系代词在定语从句中作主语时,从句谓语动词的人称和数要和先行词保持一致。 eg. Is he the man who want s to see you? #3.关系副词引导的定语从句 关系副词when, where, why引导定语从句,代替先行词(时间、地点或理由),并在从句中作状语。 eg. Two years ago, I was taken to the village where I was born. Do you know the day when they arrived? The reason why he refused is that he was too busy. 注意: 1)关系副词常常和"介词+ which"结构互换 eg. There are occasions when (on which)one must yield (屈服). Beijing is the place where(in which)I was born. Is this the reason why (for which)he refused our offer? * 2)在非正式文体中,that代替关系副词或"介词+ which",放在时间、地点、理由的名词,在口语中that常被省略。 eg. His father died the year (that / when / in which)he was born. He is unlikely to find the place (that / where / in which)he lived forty years ago.

相关主题
文本预览
相关文档 最新文档