来源:蜘蛛抓取(WebSpider)
时间:2017-04-30 11:16
标签:
想知道那个
为什么我们在微信里面发的东西没有人看?你想知道答案吗?
为什么我们在微信里面发的东西没有人看?你想知道答案吗?
很多培训公司,学员都是花了几千元钱,通过网络五湖四海千里迢迢的汇集到一个地方,来听老师讲课,我不知道你参没参加过这样的培训,我前不久就参加过这样一次培训。
所有参加培训的学员都是看到了有问题的结果,而交钱来到现场的,什么意思?下面这几句话你用心体会一下:
1、小米4值300亿美金,你想学吗?(这个叫做结果)
2、小米为什么在4年的时间创造了300亿的结果,它是怎么实现的?你想学吗?(有问题的结果)
这两句话你感觉哪一句话对你有感觉,是不是第二句?
全世界所有公司在做任何营销的时候,它都会在前面把一个你想知道的到底是什么的问题抛出来,最后它都告诉你答案,你以为是问题,其实它就是答案。
1、苹果手机好,你用吧!(这个叫做结果)
2、为什么全中国12亿人口都在用苹果手机,你想知道答案吗?(有问题的结果)
1、学【旺府微课堂】能赚钱,你学吧!
2、她是一个小学文化,学【xx教程】一个月赚了3万块,你想知道原因吗?
3、他是一个连自己名字都不会写的人,只会玩手机,学【旺府微课堂】一个月赚了6万块,你想知道答案吗?
这几句话你用心体会一下,会有什么感觉?是不是听了以后,很想知道?
为什么我们在微信里面发的东西没有人看?是因为我们直接把答案干出去了,而没有在前面抛出读者想知道的问题?
a、我现在在销售我们的教材,它对你很有帮助。
b、12点了我还没有睡觉,还在销售我们的教材,想一想我就睡不着觉,为什么睡不着觉,你想知道答案吗?【旺府微课堂】这套教材将告诉你所有的答案,【旺府微课堂】我爱你一万年!
你要抓住人的两大欲望,这两大特点就是【求知欲】和【好奇心】
你要是卖一种东西的时候,你永远都不要用一种语言来表述,如果用一种语言来表述我敢保证没有人看。
营销就是用不同的手段,不同的勾魂文字技术让看你微信(文章、网页)上的人,他看到不同的是有问题的结果,却从来都看不到答案,答案在哪里?——开封即卖!
用不同的手段,不同的方式来刺激别人的求知欲和好奇心!
如何用各种方式来刺激别人的求知欲和好奇心呢?—————————————“字能量”
所有字能量的词语不能低于3个字,否则没有“字能量”
下面举几个“字能量”
我的妈呀!
真不敢相信!
真要命啊!
哎呀,我的妈呀!
妙不可言!
不可思议!
无与伦比!
难以置信!
不敢想象!
离谱到夸张!
看到一个这么吓人的【旺府微课堂】,让我感到它是全世界最牛X的东西,我的妈呀!用了它以后,真不敢相信!它能够让多少人赚钱,要命啊!可否让你们少聊我的微信,愿意的话可以直接跟我买,不要搞那些不可思议的答案,我真的觉得妙不可言的教材,让我们出现了无与伦比的人生,创造了难以置信的结果,最后得到了不敢想象的收入!
我们要用不同的字能量,通过不同的方式表达我们的产品,引起客户的好奇心和求知欲,我们只要抛出带有问题的结果,却从来不给答案,答案——开封即卖!
copyright(C) 唯美系网
All Rights Reserved 苏ICP备号-1我是一名即将步入大学的大一新生,想知道去报道时都要带些什么东西呢?
如题,我是一名即将步入大学的大一新生,想知道去报道时都要带些什么东西呢?
说明:此列表适合任何学校新生,由多名在校老生总结,完备实用,如果不看,随心准备肯定会丢三落四,毕竟初入大学,大家都是第一次。除重要工具意外,其余的都可在当地购买,但很多东西当天买来不及,如果能,尽量带全,然后当天快点整理床铺好给后报到的室友腾出整理衣物的空间。
一、重要工具
1.录取通知书(必须带!!!);高考准考证、考分条(录取通知书丢失时有用,还是带着吧);
2.户口本;户口本本人页复印件4份(部分院系报到需要)
3.身份证及正反两面复印件4份;(在学校也会有地方复印,但是开学肯定人很多还要排队)
4.若干百元大钞&银行卡至少1张;(最好是录取通知书里面的当地卡)(父母有信用卡的最好把信用卡带着,报名那天因为还有小数额的钱要交。大多数家长都是带的现金,于是现金交学费的窗口排队排死了,但是有的学校有信用卡交学费处,才三两个人,一下就搞定了~)
5.一寸照片至少12张,两寸照片2-4张(开学不是马上都用,之后两天陆续要用,有一些学长会到你们寝室帮着照一寸照,但是个人拿相机照的十分简陋、背景就是两人举一张蓝布,效果不好还很昂贵,建议不要在他们那里照,自己带好,肯定用得着,比如学生证、团关系转接证、学生档案转借手续证、军训表现录入表、验牙单、社团会员证、超市会员卡、学生会入会申请表、体检单等等等)
6.团员档案、学生档案(切记!!两样都十分重要!必须带!!!少一样一定是不能入校的,切记!不是开玩笑!!!)
7.照相机及相应的相机卡、照相机的数据线(数据线没了的带好读卡器,开学军训和进入寝室的时候多照几张照片,今后你就知道了,这些照片是你最难得的回忆,很有珍藏价值!如果没有相机,就暂时拿手机照吧,别总管别人借相机,一般同学不愿意把那么贵的东西往出借)
8.手机及附件(充电器、电板、耳机、足量的数据线)
9.U盘移动硬盘及家里电脑中有用的文件要装里
10.创口贴若干、纱布、绷带、医用棉签(开学军训时经常搬东西,拿书什么的,经常有同学把手划破又装没事,这时候你要说我有创口贴给你贴上,那他得老感动了,这对于加快新朋友交往进程有很大帮助)
11.晕车的朋友要带晕车药若干
12.生病服药期间的同学带要吃的药足量
13.不会分东南西北的同学带指南针一个随身携带
14.近视眼的同学带好眼睛、镜布及镜盒
15.电子词典要带,总用手机查单词慢
16.大卡、小卡读卡器
17.充电电池若干配充电器
18.QQ密码、QQ密保卡备份、及其他密码备份以及重要口令、指令、密保可能记不住的都要有安全备份。
19.现金:报到当天需要交被褥钱(下文我提到要带被褥,其实学校一般是给发的,如果发就不用带了,发不发录取通知书上会说,往届是发的,就怕每年不一样,还是留心一下),要是发的话至少收你490块钱,然后还有学生卡至少充100,洗衣卡一般都得170(我建议你别办,因为那是干洗店的,离寝室远,最好开学后找水洗店办卡),然后还有中国移动搞活动你肯定还得充100块钱,还有什么锁头什么的,所以,看录取通知书的学费是多少,寝室费多少,在这基础上,再带1000现金!
二、生活用品
1.喝水的杯子(最好是能盖干的不锈钢杯)
2.牙刷和牙膏(牙膏建议带家庭装的那种)
3.毛巾(多带两条,我有同学每次洗澡都重买一个毛巾,然后就丢了,再洗再重买,浪费钱!)
4.肥皂(洗衣服的,不太会洗的最好带洗衣液,洗衣液冲不净没有痕迹,洗衣粉冲不净会有白痕)以及皂盒(建议用带盖子的)
5.洗发水(护发素)
6.沐浴液或者洗脸用的香皂
7.蚊香(这个是违规用电器,绝大部分寝室不让用,如果不敢违规的话,建议以花露水或者蚊帐代替)
8.毯子或者空调被(看看录取通知书里面,一般都是学校给发,当然了,是要钱的,所以一般都无需自带被子,但是为了保证躺在床上不会感到硬,再带个被垫到被单底下还是比较不错的,另外,南方的学校,当然也包括省内的锦州、阜新什么的天气都比较热,出汗严重的胖胖建议带个凉席代替被单,要不睡觉得难受死)
9.手纸或面巾纸(不要报到当天去逛学校超市,人很多,而且价格贵。该带的都自己带好了)
10.蚊帐(看看录取通知书里面,基本上学校会给发,如果发的话他会写,那就不用带了)
11.湿巾(盒装的和一包包的,盒装的放寝室里,一包包的可以随身带,军训的时候务必随身揣着,尤其胖人,要不擦汗不方便)
12.应急台灯最好是能充电的(个别人考前突击时候会用,但是建议同学为了确保室友的休息质量,不要经常在熄灯后开台灯,哪怕是找东西,这是一种礼貌,有的朋友睡觉怕光,熄灯后总开台灯干这个找那个的可能打扰到别人休息)
13.筷子、勺子(吃泡面,不要以为有食堂就够了……食堂是有营业时间的,你要是参加点比赛或者活动过了19:30,就进不去食堂了,当然,渤海大学超市一进门右转那个卖水的地方有煮方便面的,你可以买一包加5毛钱让他给你煮,然后在他那个小桌上吃完,个人经验卫生还是不错的,吃过好几次了,这对晚上因为活动回来晚的同学很方便。但是建议,方便面有害健康,仅作应急之用,不可常吃)
14.拖鞋(很重要,熄灯上床之后想下地喝水上厕所总不能再把旅游鞋穿上)
15.出门穿的鞋子(脚下一双也可以,但建议两双,以防下雨浇湿了可以换)
16.夹衣架(八脚架,这个带几个就行,然后到超市去买,寝室一定要多弄点这个东西,另外不要计较是谁买的,随便用,大家一起用,寝室要像一家人一样)
17.粘钩(下雨天晾衣服或者在床铺上挂点零碎的小东西)
18.吹风机(这个是违规用电器,雨季特别有用,大家都不喜欢穿湿湿的鞋吧,但是一旦被抓到寝室有吹风机恐怕要受点处分,建议使用时锁门,用后藏起来,而且不要使用大功率的,寝室的电源是限电的,功率超限会鼓坏电路,那就要受罚了)
19.洗面奶等护肤用品(男生无所谓)
20.洗洁精(如果你带的泡面不是碗状的话)
21.钱包(个别男生没有钱包,把一大堆钱塞在裤兜里,那你可得保证你的裤兜深度足够,可别还没花呢就丢一大堆钱)
22.盆子(查看录取通知书,看看发不发,往届都是给发的,就不用带了,基本是能摞在一起的,节省占地空间,别让寝室太拥挤);
23.暖壶2个(查看录取通知书,这个往届也是会发的,记住了,暖壶比较容易被偷,打完水要迅速拿回来,不要留在热水处,也不要放在寝室门外,如果丢了,学校超市有售)
24.洗鞋刷、钢丝球(经常刷刷鞋,如果实在懒的话,三区六号楼寝室有洗衣店,刷鞋每次两块,内外都刷,但是要等两天才能取)
25.小镜子(寝室一般有大镜子,如果觉得不方便,就带个小镜子)
26.剪刀、胶水、双面胶、透明胶(别小看这些,很多人借)
27.伞、要到那买自行车或者托运自行车去的同学还要准备雨披(这个别等着到学校超市买,超市一把伞三十多,还是普通伞,而且不卖雨衣)
28.护手霜、手套、围巾、热水袋(可以到秋冬季再带)
29.浴球、浴帽或者搓澡巾
30.擦席子的布(不想被席虫咬的话,勤擦席子,所有学校都不是装空调的,睡被单比较热,要带席子)
31.睡衣(睡觉的半袖衣最好不要白天穿什么睡觉还穿什么直接一躺,因为如果你睡觉爱翻身的话容易弄出折纹)
32.袜子、内衣裤和换洗衣物(有的同学换洗衣物带的不够,又不勤洗,结果没有换的了,每次洗澡前去买个袜子买个内衣裤,很浪费,学校超市的标价是很高的,不要轻易在那里买衣裤)
33.(女)镜子梳子以及头绳
34.夹蚊帐的夹子(一般学校发蚊帐的话,直接系在蚊帐杆上就好,就不用了)
35.水果刀(不爱吃水果就不必带)
36.花露水(大学宿舍的蚊子是很可怕的)
37.锁及对应的钥匙(不要在开学的时候接待席那里买锁,那些锁都是学生自己做的,全是一样的,有一次我钥匙丢了,管我下铺借他的钥匙,一拧就开了)
39.编丝绳、塑料绳(很重要!!大一来的时候那个寝室比较破,基本上没有晾衣服的地方,你得拿编丝绳在两个上铺之间自己动手拉绳)
40.垃圾袋(开学整理床铺有一些垃圾,最好有一些袋子可以装它,然后一起扔掉,省得麻烦)
41.电脑(随便你带不带,估计有很多人会忍不住带吧,但建议开学后,把宿舍都理干净,十一回来再带,另外,大一男生你们寝室比较破,没有桌子,根本没有地方放电脑,网线还得自己拉,网卡又比较贵,不合算,而且那电脑拿来你们竟玩游戏,耽误学习!学习图书馆一楼有网吧,一小时才9毛钱,上网很方便,所以大一不建议带电脑!)
42.(女)化妆品
43.(男)刮胡刀
44.牛皮筋(可用来扎未吃完的零食等)或者夹子也行
48.女生必备的东西(多带点!还要有垫的布,如果你不想每个月都洗床单的话)
49.日记本和记事本(记下开学新生活的点点滴滴,当然了,你可以拿手机随时写在空间日志里,这个比较方便而且比较流行)
50.没有手机QQ的最好下一个手机QQ或者办一个超Q,以免不方便联系
三、学习用品
1.笔和笔筒(放寝室里)、笔袋(随身带)足够多的笔芯
2.回形针或夹书的夹子
3.一些自己喜欢的书(火车上很无聊的)
4.MP3(MP5比较大的同学建议再带个MP3,学英语、听歌那么大放裤兜里不方便)
5修正液、胶带纸什么的
6包(上课的上街的,不要以为拿本书就可以去上课,有包很方便)
7笔记本(重要啊~~不要以为大学的课可以随便翘,到时有的瞧了)
8.订书机并配钉(很重要,有无数的人借)
9.英语四级单词本、练习册之类的,军训的时候没有学习任务,晚上躺在寝室里反而很无聊,建议背背四级单词,等考四级的时候你的成绩会让他们大吃一惊!
下页更精彩:1
本文已影响人||||||||||||||||||
查看: 2048|回复: 13
在线时间0 小时经验值72 最后登录注册时间帖子阅读权限30UID6120971
初中生, 积分 72, 距离下一级还需 28 积分
该用户从未签到
G币0 最后登录注册时间
如题,想知道大家手机跟电脑直接互传文件都用什么软件,类似于快牙这样的软件的,很方便很好用,可惜手机跟电脑直接不能用~谁知道哪个软件方便的给推荐下~
在线时间1 小时经验值35 最后登录注册时间帖子阅读权限20UID
小学生, 积分 35, 距离下一级还需 15 积分
该用户从未签到
G币1 最后登录注册时间
共享文件夹直接拉进去- -
在线时间377 小时经验值501 最后登录注册时间帖子阅读权限60UID1259009
大学本科, 积分 501, 距离下一级还需 199 积分
该用户从未签到
G币321 最后登录注册时间
91无线助手……还有个就是利用那个共享的功能。
。。。。。。。
在线时间45 小时经验值88 最后登录注册时间帖子阅读权限30UID1580702
初中生, 积分 88, 距离下一级还需 12 积分
TA的每日心情开心 13:45签到天数: 3 天[LV.2]偶尔看看I
G币37 最后登录注册时间
无线易连好用。
在线时间4 小时经验值202 最后登录注册时间帖子阅读权限50UID
大学专科, 积分 202, 距离下一级还需 198 积分
TA的每日心情奋斗 22:32签到天数: 20 天[LV.4]偶尔看看III
G币100 最后登录注册时间
偶*惯用USB线,呵呵
在线时间24 小时经验值144 最后登录注册时间帖子阅读权限40UID
高中生, 积分 144, 距离下一级还需 56 积分
TA的每日心情无聊 22:59签到天数: 1 天[LV.1]初来乍到
G币13 最后登录注册时间
feelFTP顶好用的,用的时候打开,不用就退出
在线时间11 小时经验值85 最后登录注册时间帖子阅读权限30UID5003288
初中生, 积分 85, 距离下一级还需 15 积分
TA的每日心情擦汗 00:31签到天数: 3 天[LV.2]偶尔看看I
G币9 最后登录注册时间
文档自带共享非常好用!
在线时间0 小时经验值15 最后登录注册时间帖子阅读权限20UID
小学生, 积分 15, 距离下一级还需 35 积分
该用户从未签到
G币0 最后登录注册时间
汽车钥匙包,有车一族可以来看看。。。
/?spm=a230r..71MAXF
/?spm=a230r..1x444I
在线时间0 小时经验值90 最后登录注册时间帖子阅读权限30UID
初中生, 积分 90, 距离下一级还需 10 积分
TA的每日心情擦汗 17:13签到天数: 18 天[LV.4]偶尔看看III
G币126 最后登录注册时间
ES文件管理器,用SMB服务
在线时间0 小时经验值2 最后登录注册时间帖子阅读权限10UID
幼儿园, 积分 2, 距离下一级还需 13 积分
该用户从未签到
G币0 最后登录注册时间
如果是在一个局域网里的话 安豆苗很好用
浏览过的版块
Powered byC语言(17)
简明数据类型指南
字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看 来, A 与数字65完全一样。65是A的ASCII码
如果你要保存一个整数,通常可以使用 int 。不同计算机中 int 的大小不同,但至少应该有16 位。一般而言, int 可以保存几万以内的数字
但有时你想节省一点空间,毕竟如果只想保存一个几百、几千的数字,何必用 int ?可以用 short , short 通常只有 int 的一半大小
在某些计算机中, long 的 大小是 int 的两倍,所以可以保存几十亿以内的数字;但大部分计算机的 long 和 int 一样大, 因为在这些计算机中 int 本身就很大。 long 至少应该有32位。
float是保存浮点数的基本数据类型 。平时你会碰到很多浮点数,比如一杯香橙摩卡冰乐有多 少毫升,就可以用 float 保存
如果想让计算结果精确到小数点以后很多位,可以使用 double 。 double 比 float 多占一倍空间,可以保存更大、更精确的数字
勿以小杯盛大物
赋值时要保证值的类型与保存它的变量类型相匹配。不同数据类型的大小不同,千万别让值的大小超过变量。
&short 比 int 的空间小, int 又比 long 小。所以下面的代码是可行的。
short x = 15;int y = x;printf(&y 的值是 %i\n&, y);
但是反过来,比如你想在 short 变量中保存 int 值,就不行。
int x = 100000;short y = x;print(&y 的值是 %hi\n&, y); //%hi用来格式化
有时,编译器能发现你想在小变量中保存大值,然后给出一条警告,但大多数情况下编译器不会发现。
这时当你运行代码,计算机无法在 short变量中保存100 000。计算机能装多少0、1就装多少,而最终
保存在变量 y 中的数字已面目全非。
使用类型转换把float值存进整型变量
int x = 7;int y = 2;//float z = x ///printf(&z = %f\n&, z);float z = (float)x / (float)y;printf(&z = %f\n&, z);
因为 x 和 y 都是整型,而两个整型相除,结果是一个舍入的整数,在这个例子中z= 3 。如果希望两个整数相除的结果
是浮点数,应该先把整数保存到 float 变量中,做法就是使用类型转换临时转换数值的类型。
(float) x会把 int 值转换为 float 值,计算时就可以把变量当成浮点数来用。
事实上,如果编译器发现有整数在加、减、乘、除浮点数,会自动替你完成转换,因此可以减少代码中显式类型转换的次数:
float z = (float)x / y; // y会被编译器自动转换成float
数据类型前的关键字
用unsigned修饰的数值只能是非负数。由于无需记录负数,无符号数有更多的位可以使用,因此它可以保
存更大的数。unsigned int可以保存0到最大值的数。这个最大值是int可以保存最大值的两倍左右。还有
signed关键字,但你几乎从没见过,因为所有数据类型默认都是有符号的。
unsigned char c; // 保存0到255的数
你可以在数据类型前加long,让它变长。long&int是加长版的int;long int可以保存范围更广的数字;
long long比long更长;还可以对浮点数用long。
long double d;long long l; //注意:只有C99和C11标准支持long long。
代码示例:
# include &stdio.h&float total = 0.0;short count = 0;short tax_percent = 6;float add_with_tax(float f) { float tax_rate = 1 + tax_percent/100.0; // 有了.0,计算就会以浮点数进行,否则表达式会返回整数 total = total + (f * tax_rate); count = count+1; return total;}int main() { float val; printf(&Price of item:&); while(scanf(&%f&,&val)==1) {
printf(&Total so far: %.2f\n&,add_with_tax(val)); // %.2f把浮点数格式化为小数点后两位。
printf(&Price of item:&); } printf(&\nFinal total: %.2f\n&, total); printf(&Number of items: %hi\n&, count); %hi用来格式化short return 0;}
聚焦数据类型大小
不同平台上数据类型的大小不同,下面这个程序将告诉你 int 与 float 的最大值和所占字节数。
#include &stdio.hinclude &limits.hinclude &float.h&int main() { printf(&The value of INT_MAX is %i\n&, INT_MAX); printf(&The value of INT_MIN is %i\n&, INT_MIN); printf(&An int takes %i bytes\n&, sizeof(int)); printf(&The value of FLT_MAX is %f\n&, FLT_MAX); printf(&The value of FLT_MIN is %.50f\n&, FLT_MIN); printf(&A float takes %i bytes\n&, sizeof(float)); //如果你想知道char、 double或long的细节呢?也很简单,只要把 //INT 和 FLT 替换成 CHAR (char) 、 DBL (double) 、 SHRT (short) 或 //LNG (long) 即可。 printf(&The value of CHAR_MAX is %i\n&, CHAR_MAX); printf(&The value of CHAR_MIN is %i\n&, CHAR_MIN); printf(&A char takes %i bytes\n&, sizeof(char)); printf(&The value of DBL_MAX is %f\n&, DBL_MAX); printf(&The value of DBL_MIN is %.50f\n&, DBL_MIN); printf(&A double takes %i bytes\n&, sizeof(double)); printf(&The value of SHRT_MAX is %i\n&, SHRT_MAX); printf(&The value of SHRT_MIN is %i\n&, SHRT_MIN); printf(&A short takes %i bytes\n&, sizeof(short));// printf(&The value of LNG_MAX is %l\n&, LNG_MAX);// printf(&The value of LNG_MIN is %l\n&, LNG_MIN); printf(&A long takes %i bytes\n&, sizeof(long)); return 0;}
运行结果:
问: 为什么不同操作系统的数据类型大小不同?设成一样不是更明了?
答: 为了适应硬件,C语言在不同的操作系统与处理器上使用不同的数据类型大小。&C语言诞生之初还是8位机的天下,
但现在大部分计算机都是32位和64位的,因为C语言没有指定数据类型的具体大小,所以才能与时俱进。即使新的计算机出来,
C语言还是能够很好地适应。
问: 8位、64位到底是什么意思?
答: 从技术上讲,计算机的位数有多种含义,它既可以代表CPU指令的长度,也可以代表CPU一次从存储器读取数据的大小。
实际上,位数是计算机能够处理的数值长度。
问: 这和int、double的大小有什么关系?
答: 如果一台计算机能处理32位的数值,就会把基本数据类型(例如int)的大小设为32位。
正确的顺序
(在不使用头文件的情况下)同一个源文件中,如果一个函数的定义放在了其调用的地方之后,一般就会报编译器错误。
因为计算机从上往下执行代码时,调用一个函数如果发现前面代码中没有的话,它并不知道该函数的返回值类型,
因此他会先假设函数返回int,但实际上函数可能返回了float ,这就造成了冲突。
在某些场景中,没有正确的顺序
如果有两个函数,它们互相调用对方,那么总有一个函数在定义前被调用。
声明与定义分离
如果编译器一开始就知道函数的返回类型,就不用自己假设为int了,
你可以通过 函数声明 显式地告诉编译器函数会返回什么类型,如:
float add_with_tax()(float f); // 声明没有函数体
如果代码中有很多函数,你又不想管它们在文件中的顺序,可以在代码的开头列出函数声明:
float do_something_fantastic();double awesomeness_2_dot_0();int stinky_pete();char make_maguerita(int count);
甚至可以把这些声明拿到代码外,放到一个头文件中。
如何创建你自己的头文件
1.创建一个扩展名为.h的文件,并把你的声明写在里面。
2.在主代码中包含该头文件
#include &totaller.h&
// #include是预处理命令
注意:头文件的名字用双引号括起来,而不是尖括号,它们的区别是:当编译器看到尖括号,就会到标准库代码所在目录
查找头文件,但现在你的头文件和.c文件在同一目录下,用引号把文件名括起来,编译器就会在本地查找文件。
本地头文件也可以带目录名,但通常会把它和C文件放在相同目录中
问: 你提到了编译器预处理,为什么编译器需要预处理?
答: 严格意义上讲,编译器只完成编译的步骤,即把C源代码转化为汇编语言。但宽泛地讲,编译是将C源代码转化为可执行文件
的整个过程,这个过程由很多阶段组成,而gcc允许你控制这些阶段。gcc会预处理和编译代码。
问: 什么是预处理?
答: 预处理是把C源代码转化为可执行文件的第一个阶段。预处理会在正式编译开始之前修改代码,创建一个新的源文件。
拿你的代码来说,预处理会读取头文件中的内容,插入主文件。
问: 预处理器会真的创建一个文件吗?
答: 不会,为了提高编译的效率,编译器通常会用管道在两个阶段之间发送数据。
问: gcc就是在哪里找到 stdio.h头文件的?
答: 是的,在类Unix操作系统中, stdio.h 位于 /usr/include/stdio.h ;如果在Windows中安装了MinGW编译器,&
stdio.h 就很有可能在 C:\MinGW\include\stdio.h 中。
C语言是一种很小的语言,所有的保留字都在这里(排名不分先后)。
编译器的工作原理
1.预处理:修改代码。
编译器需要用 #include 指令添加相关头文件;编译器可能还需要跳过程序中的某些代码,
或补充一些代码。改完以后就可以随时编译源代码了。
2.编译:转换成汇编代码。
C语言看似底层,但计算机还是无法理解它。计算机只理解更低层的机器代码指令,
汇编语言描述了程序运行时中央处理器需要执行的指令。
3.汇编:生成目标代码。
编译器需要将这些符号代码汇编成机器代码或目标代码,即CPU内部电路执行的二进制代码。
4.链接:放在一起。
一旦有了全部的目标代码,就需要像拼“七巧板”那样把它们拼在一起,构成可执行程序。当某个目标代码的代码调用了另一个目标
代码的函数时,编译器会把它们连接在一起。同时,链接还会确保程序能够调用库代码。最后,程序会写到一个可执行程序文件中,
文件格式视操作系统而定,操作系统会根据文件格式把程序加载到存储器中运行。
共享代码需要自己的头文件
如果想在多个程序之间共享encrypt.c代码,需要想办
法让这些程序知道它,为此你可以用头文件。
比如你想让其他c文件调用下面这个函数
// encrypt.c 文件
#include &encrypt.h&void encrypt(char *message) { char c; while (*message) {
*message = *message ^ 31;
message++; }}
先要把该函数声明到一个头文件中,并像上面那样自己include该头文件
// encrypt.h 文件void encrypt(char *message);
接下来,在你想调用该函数的源文件中也include上面这个头文件即可。
//message_hider.c文件
#include &stdio.hinclude &encrypt.h& //将包含encrypt.h,这样程序就有了encrypt()函数的声明int main() { char msg[80]; while(fgets(msg,80,stdin)) {
encrypt(msg);
printf(&%s&,msg); }}
为了把多个源文件编译成一个可执行文件,只需执行下面的命令:
gcc &message_hider.c &encrypt.c &-o &message_hider
运行结果:
你已经知道如何在不同的文件之间
共享函数,但如果你想共享变量呢?
为了防止两个源文件中的同名变量相
互干扰,变量的作用域仅限于某个文
件内。如果你想共享变量,就应该
在头文件中声明,
并在你当前文件中声明该变量,并在变量名前加上
extern关键字:
// password.h文件
int passcode = 100;
//message_hider.c文件#include &stdio.hinclude &password.h&extern int password;
// 说明该变量是外部的(这句可不写,写了更好)int main() { printf(&%i&,password);}
运行结果:
不要重新编译所有文件
如果只修改了一两个源文件便为程序重新编译所有源文件就是浪费。
更有效率的做法:
首先,把源代码编译为目标文件
// 得到单个源文件的目标文件命令:gcc -c xxx.c
----&将生成对应的.o目标文件// 为了得到所有源文件的目标代码,可以输入以下命令:命令:gcc -c *.c
---&将生成 所有源文件对应的.o目标文件
然后,把目标文件链接起来
// 链接两个目标文件成可执行文件命令:gcc xxx.o yyy.o -o launch
---&将生成可执行文件launch.exe(windows下)// 链接所有目标文件成可执行文件命令:gcc *.o -o launch
---&将生成可执行文件launch.exe(windows下)
这样的话,如果你只改了xxx.c文件,就只需再编译一次xxx.c,然后再链接即可,不用再编译所有源文件了。
如果只改了一个源文件,那还好,但如果你改了很多文件,就很容易忘记哪些改过哪些没改过。
要是有工具能自动重新编译那些修改过的源文件就好了。
用make工具自动化构建
make 编译的文件叫目标(target)。严格意义上讲, make 不仅
仅可以用来编译文件。目标可以是任何用其他文件生成的文件,
也就是说目标可以是一批文件压缩而成的压缩文档。
对每个目标, make 需要知道两件事:
依赖项----&
生成目标需要用哪些文件。
生成方法----&
生成该文件时要用哪些指令
依赖项和生成方法合在一起构成了一条规则。有了规则, make就知道如何生成目标。
注意:make在Windows中另有其名。
来自UNIX世界的make在Windows中有很多“艺名”,MinGW 版的make叫mingw32-make,而微软有自己的NMAKE。
用makefile向make描述代码
所有目标、依赖项和生成方法的细节信息需要保存在一个叫makefile或Makefile的文件中。
假设由下面这几个文件生成launch.
&那么makefile文件应该这么写:
&注意:生成方法都必须以tab开头。如果尝试用空格缩进,就无法生成程序。
将 make 规则保存在当前目录下一个叫Makefile的文本文件中,
然后执行命令:make launch
注意:上面的是类Unix系统中的做法。
windows下用makefile命令有所不同:
mingw32-make &-f &makefile.txt
假如makefile.txt文件中是这么写的,那么他只会执行第一条命令gcc -c encrypt.c。
encrypt.o: encrypt.c encrypt.h gcc -c encrypt.claunch:encrypt.o message_hider.o gcc encrypt.o message_hider.o -o launchmessage_hider.o:encrypt.h message_hider.c
gcc -c message_hider.c
想要一次执行所有的命令,就把最后一条合成的命令写到最前面,如
launch:encrypt.o message_hider.o gcc encrypt.o message_hider.o -o launchmessage_hider.o:encrypt.h message_hider.c
gcc -c message_hider.cencrypt.o: encrypt.c encrypt.h gcc -c encrypt.c
这样的话他的执行次序就是:
gcc -c encrypt.cgcc -c message_hider.cgcc encrypt.o message_hider.o -o launch
最后生成了一个launch.exe文件。
运行结果:
&如果现在我只修改了encrypt.c文件,再执行命令,你发现只有修改的文件由重新编译了,这就是我们想要的效果!
问: 除了编译代码,我能用make做其他事情吗?
答: 可以,虽然make一般用来编译代码,但你也可以用它充当命令行下的安装程序或源代码控制工具。事实
上,任何可以在命令行中执行的任务,你都可以用make来做。
make的更多信息和功能,请浏览 &GNU Make Manual :
make减轻了编译文件时的痛苦,但如果你觉得它还不够自动化,可以试一试这个叫autoconf的工具:
http://www.gnu.org/software/autoconf/
autoconf可以用来生成makefile。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:49628次
积分:1105
积分:1105
排名:千里之外
原创:53篇
转载:10篇
评论:12条
(1)(1)(2)(1)(14)(2)(2)(12)(25)(11)