Linux 版 (精华区)

发信人: netiscpu (说不如做), 信区: Unix
标  题: Gcc的安装与使用 (5)
发信站: 紫 丁 香 (Sat May 16 20:59:11 1998), 转信


发信人: jacky (绞肉机), 信区: linux
标  题: Gcc的安装与使用5
发信站: 饮水思源站 (Fri May 15 16:42:14 1998) , 站内信件



那些无法移植的程式码(non-portable bits),以条件式编译(conditional compilation)
的前置命令封括(enclose in)起来,可是个不错的主意呢!

     #ifdef __linux__
     /* ... funky stuff ... */
     #endif /* linux */

用__linux__即可达成目的;看仔细一点,不是linux啊.仅管後者也有定义,毕竟,仍然不是
POSIX的标准(not POSIX compliant).

4.2. 线上求助说明(invocation)

gcc编译器参数(switches)的说明文件是gcc info page(在Emacs内,按下C-h i,然後选
'gcc'的选项).要是弄不出来,不是卖你CD-ROM的人,没把这个东东压给你,不然就是你现
在用的是旧版的.这种情况下,最好的方法是移动尊臀到archive
ftp://prep.ai.mit.edu/pub/gnu或是它的mirrors站台上,把gcc的原始档案抓回家,重新
烹饪一番.

gcc manual page (gcc.1) 可以说是已经过时了.一旦你吃饱撑著没事干要去看看它的话,
它就会告诉你这件事,叫你别无聊了.

4.2.1. 旗正飘飘~(flags) 

在命令列(command line)上执行gcc时,只要在它的屁股後面加上-On的选项,就能让gcc乖
乖的替你生出最佳化後的机器码(output code).这里的n是一个可有可无的小整数.不同的
gcc版本,n的意义与其正确的(exact)功效都不一样;不过,典型的□围是从0(不要鸡婆,我
不要最佳化)变化到2(最佳化要多一点),再到3(最佳化要再多一点,多一点).

gcc在其内部会将这些转译成一系列的-f 与-m选项(options).执行gcc时带上旗号(flags)
-v与-Q,你就能很清楚的看出每一种等级的-O是对应(maps)到那些选项(options).例如,就
-O2来讲,我的gcc告诉我说:

     enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks
     -fexpensive-optimizations
              -fthread-jumps -fpeephole -fforce-mem -ffunction-cse -finline
              -fcaller-saves -fpcc-struct-return -frerun-cse-after-loop
              -fcommon -fgnu-linker -m80387 -mhard-float -mno-soft-float
              -mno-386 -m486 -mieee-fp -mfp-ret-in-387

要是你用的最佳化等级(optimization level)高於你的编译器所能支援的(e.g. -O6),那
麽它的效果,就跟你用你的编译器所能提供的最高等级的,是一样的结果.说实在的,发行出
去的gcc程式码,用在编译时竟是如此处理这等问题,实非什麽好的构想.日後若是有更进步
的最佳化方法具体整合到新的版本里,而你(或你的users)还是试著这样做的话,可能就会
发现,gcc会中断你的程式(break your code)了.

--
m;32m※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.112.26.100]m


--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.084毫秒