一直想知道那个呢 为啥我只发了一个文件 但是每次都显示我发送了两个文件呢

为什么我们在微信里面发的东西没有人看?你想知道答案吗? 为什么我们在微信里面发的东西没有人看?你想知道答案吗? 很多培训公司,学员都是花了几千元钱,通过网络五湖四海千里迢迢的汇集到一个地方,来听老师讲课,我不知道你参没参加过这样的培训,我前不久就参加过这样一次培训。 所有参加培训的学员都是看到了有问题的结果,而交钱来到现场的,什么意思?下面这几句话你用心体会一下: 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.h&#include &limits.h&#include &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.h&#include &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.h&#include &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)

我要回帖

更多关于 想知道那个 的文章

 

随机推荐