我是大帅哥,擅长LINUX和C语言,还有脚本,希望和大家交朋友 mail:newhitler@163.com

《GNU CC》练习题

上一篇 / 下一篇  2007-08-12 13:57:58 / 个人分类:C语言编程

Ahhl6J^o01)编写程序<<打印hello world>>

:Ppf,Y!je8E1az1q0

@;O GB.e V aS/U0LUPA开源社区*PC-}3^R9_
参考答案:LUPA开源社区j R~7vT
/*first.c*/
[/]&AwiM,m0# include <stdio.h>LUPA开源社区$@U\ S:a8K5lWO#G

LUPA开源社区7F[*J f }^ E D

int main (void)LUPA开源社区$`o/xT-ai"G6Q(C
{LUPA开源社区yn F7Nu/[,e0C$O+K
 printf("Hello world!\n");
R ]M Z3qF e0 return 0;
;Q E!w x*e9i5m0}LUPA开源社区Y'^ z [D!q?%Vjh[ w

LUPA开源社区yH4MR id8GCE

 

+Hkw$B*\1[8W0

OBE\L!e7{ `B)e02)分步编译以上程序,在预处理后停止编译LUPA开源社区vQ"F)GX*}n5l\

q2{$aOY.D4H`Lj W0参考答案:
F+Y$\#` m p2}3t"w0gcc -E -c first.c -o first.cppLUPA开源社区-Zw @s#Hl3t` g^&~

YWC3AE wg0 LUPA开源社区4h#}6Q$y-J8YG5~e

LUPA开源社区0M?G q^!S

3)在预处理后编译为目标代码

i.a6D}aF0 LUPA开源社区)fK(a'zFw,n:W

参考答案:
9YbhT+CZ7[0gcc -x cpp-output -c first.cpp -o first.o

4T[ },U4pzb:K0

WKvI&V!PviH0 LUPA开源社区s ?&q2b'[

LUPA开源社区!Dswm4u#PJ

4)链接目标文件,生成二进制代码

IU#XZoH ]'Io~_0 LUPA开源社区D3c x2wH

参考答案:LUPA开源社区 ve l2i1D1c!l&ns
gcc first.o -o firstLUPA开源社区8DC8}` A0C2@C&VQ(|

F~%p8M9V?@Ts@0

P;O8zia+BQI6C0 LUPA开源社区%Q fLV_/|:\

LUPA开源社区0RQ/{;r6{8PpF

LUPA开源社区z q7E/?RI#D Ka
5)编写程序<<主函数打印hello world,定义头文件help.h,头文件中定义msg函数,msg函数打印i love you qiuming,主函数调用msg函数>>

oR vD3r0ngx;v-h0 LUPA开源社区Y9T TuA'yr}


bP wY)? M o0参考答案:LUPA开源社区!o,|&F9z6J-dm
/*hello.c*/
;BYq"nKb:Ri0# include <stdio.h>
hkY5XN-Ml3[b9U0# include "help.h"LUPA开源社区:d%wS9RaW2p o F

LUPA开源社区 j/B1Q E9X"?/I)t%W a

int main (void)

:p5o&~"QN6g Rh7PVU0

!TO7]Q)T_6P0{LUPA开源社区%f0W9Ap v%wC
        printf ("I love you!\n");
J s5v-^4w0        msg();LUPA开源社区t;P4@Gi
        return 0;LUPA开源社区Q8@ u/^&QYHm~
}

'V@(] L-[8z3H0 LUPA开源社区"nVi;?3S

/*help.h*/
q2yCP~,C0void msg (void);LUPA开源社区3lt _'XvSl

LUPA开源社区6O8GH*@j-_9UB8P

/*msg.c*/LUPA开源社区`,LV!P(Nm?W
void msg (void)LUPA开源社区2E%s7QJ5X-o|
{LUPA开源社区xL8WdL3VJ
        printf("i love you qiu ming!\n");
2vr@$[0S:z0}LUPA开源社区j J2_+jLRK6t

LUPA开源社区Ij\|U,x{n

 

C~})~"X7^6sJ:b0 LUPA开源社区L^7ib.R

LUPA开源社区3@W)\o MXY+f
6)编译以上的hello.c和msg.c,生成二进制文件helloLUPA开源社区)Q!q b5\)F7b+[ x.l

'f+t1|d&E^0参考答案:
)Q1d\ K e0gcc hello.c msg.c -o helloLUPA开源社区%Hs_dq

w m,B'[;M\0S&rY0 LUPA开源社区B0P j6u;`g&o1f9J"N

LUPA开源社区s\&j.Jj1z

LUPA开源社区"`ohbL!aYZM
7)在当前目录下新建目录include,将help.h移到此目录下,指定头文件路径的路径,用GCC重新编译以上程序LUPA开源社区x9tZiZ(r;k

A].v3m w9B4a n0参考答案:
[w7z"wXx P0mkdir include
h4VkX#LNX0T0mv help includeLUPA开源社区n5cD Gj!cV
gcc -I include hello.c msg.c -o hello

'Q YYh }Y{v0 LUPA开源社区 BW9\9f2mR

 LUPA开源社区O"eIqy bG,P Y b*B

/t`3ul!l5eQ0LUPA开源社区!M ?4` [ b9\H
8)将msg.c生成共享库libmymsg.soLUPA开源社区3_o GIp"yu*V!tn+?N

LUPA开源社区 ]&irT%n,wd

参考答案:LUPA开源社区4]f a$v ` z/s
gcc -shared -o libmymsg.so msg.cLUPA开源社区Q5rd2U?TB!v

Q+eS$ClFd0 

'} Sl1d[9m1y0 LUPA开源社区Df)]'C h8h ^d


P~.d;A4w F'aM6L09)在当前目录下新建目录lib,将libmymsg.so移入此目录下面,在ld.so.conf加入./lib路径,并重新加载

Nm @[x0 LUPA开源社区3z2L[jo"U

参考答案:LUPA开源社区5Nksv,n&v:e@P
mkdir libLUPA开源社区xe3k3f6w5oz
mv libmymsg.so lib
OX p9N*}HB[$mC0vi /etc/ld.so.conf
jo5foL#S#?0tLP0加入LUPA开源社区R;h?%[ k\.d2GR
./libLUPA开源社区 q[&h[lcd'g3^u.U
ldconfigLUPA开源社区Bcxq)v7B(Wc

LUPA开源社区W*o:X[? Mb

 LUPA开源社区"v&q M q%N }.xY }

LUPA开源社区%Yk0K y DN3U


l.Jh6qT3r010)指定库的优先搜索路径为./lib,链接共享库的文件名为libmymsg.so,重新编译hello程序

Cdf:Bk0 LUPA开源社区*\O,_{b

参考答案:LUPA开源社区N8C4T4o#_
gcc -o hello hello.c -I ./include/ -L ./lib/ -lmymsgLUPA开源社区 C(W8G K}0cB*|W

u{`k.W7e1?X0 

(q[\ V9A+|ke0 LUPA开源社区o&G7WAJ|,p


4[ d)d?7xn011)查看是否加载了libmymsg.so库LUPA开源社区WO_|uc(ec

LUPA开源社区p(ISO8Mp's;F

参考答案:
x@ H@ }BF$w!L6|0ldd helloLUPA开源社区/w:e#U!~+Avd.f

!q ^g M)JZ!f0 LUPA开源社区 W&zGS'mq2k

LUPA开源社区6V-D G7HuCUEQv

LUPA开源社区R'dL-~ dl[[4O/Bn
12)编译msg.c,生成静态库msg.a,并移入./lib/中LUPA开源社区Q.l$wm:O%m;Rk-w

*A2] {'k-r0参考答案:
c2kq I*Sd0gcc -c msg.c
#K9C7\&J0f lj2HFd0ar crv msg.a msg.oLUPA开源社区*s {$yC-E0[ch
mv msg.a lib/libmsg.aLUPA开源社区:P(CJwQ0]0P I+s

LUPA开源社区(YAqh G%k~%I

 

uO$M'Jm8qn0 LUPA开源社区r-C,{v%NG2Sl$s

LUPA开源社区,GK2O q)lia8\
13)指定库的优先搜索路径为./lib,链接静态库的文件名为libmsg.a,编译静态库文件为hello_s程序

?{'muB*k!{B0 LUPA开源社区!E7z9[5Ju4^B]pT

参考答案:LUPA开源社区I*aEzf#MjBNt]
gcc hello.c -I ./include -L./lib -lmsg -static -o hello_sLUPA开源社区6b5]EX |3R!r1O?#X

G2j \5E u.wI!SV(en0 

P)[[:a:r#W `.e poy4o0

i*f/OP1y'X cXM0 LUPA开源社区+f D\,C\*@lXz)kD7g

LUPA开源社区E#Y\.e(b@+xH

14)写一个不符合ANSI C标准的程序,main函数的返回值为void,定义long long的64位整型变量,不写return返回

-A'z-d5O6a v4fsz0

y p%u Bn+El~(u8~s0
xeZ+[)B'[ G u0参考答案:
9s tU2M8`B~(W0/*pedant.c*/

|3{ K\&l|9u(r y)H0 LUPA开源社区0a BbH%}1e#d|*Z;z

# include <stdio.h>LUPA开源社区l U ay.l%nX }"V oCRN

LUPA开源社区@|X)F_C3~V-n[

void main (void)

gs}-GP tx iP0

*Cg5i^z4e-kVOO0{LUPA开源社区$n_'y:o yp%B
        long long int i=01;LUPA开源社区7MDt @o
        printf("Hello World\n");LUPA开源社区 Fg]o'UeU
}

6lQ0D0zy7\6Y2E0

#SpP7j t3J0 LUPA开源社区CuC;te8O9SO^*Q

LUPA开源社区5d oG @| q5W%[7X


*s&p/\z Em015)编译pedant.c,只强制GCC生成标准语法的诊断信息

pm:\gc z8G6d3x0

&s$ZT3L#kV"V [0参考答案:LUPA开源社区r&M7C],W"eg
gcc -ansi pedant.c -o pedant

;W+y7P6kH0

My T` [(g7D0 

;V%J7S,p/s.H0

M5r"?W+@%L1RB0 LUPA开源社区V:L ?*n3Xl'_b"{

8z2A'J5E%mJ1I016)编译pedant.c,强制GCC生成标准语法的诊断信息,并加入禁止扩展语法的信息LUPA开源社区2g4u ]KK#[ j

LUPA开源社区T/Dq*c-v:|]

参考答案:LUPA开源社区$O8z|Sz
gcc -pedantic pedant.c -o pedantLUPA开源社区9N;?1n2T`N7lp g

LUPA开源社区%l$j^-ayK7Z3_H

 

9{?)mR:U+Bz ?%`0 LUPA开源社区/k1p#]z4B

 

#@*Y6Q&@ A{!}!a0 LUPA开源社区(TBQ(rH$i;B

17)编译pedant.c,强制GCC生成标准语法,并检查扩展语法,如检查出错误,就停止编译LUPA开源社区;YD+VY V4A:b0a

LUPA开源社区 S Gj s"?x ?I[8j

参考答案:LUPA开源社区g|Tu4Lw1H
rm pedant
)Dd0n+?"y'H7KFU3k0gcc -pedantic-errors pedant.c -o pedant
BGz8[(I$~4U7{0ls -lLUPA开源社区eE6s5P/{

*uv1l-Pg"k(y0 

5W&b,\B)g&B0

r-n.e'm.B6W"p0 

0uHN)UXk"`R0 LUPA开源社区L{4L"W-`+[

18)编译pedant.c,生成多种有用的警告信息,如检查上个程序中的未定义变量

g#v%x:g*]d d3S_9[;~0 LUPA开源社区IM+MgZ$XJn

参考答案:
4@"Y:W1HK?!^azj!x V0gcc -Wall pedant.c -o pedantLUPA开源社区S8h9Y5G&oh

LUPA开源社区A$a"R MR)p

 LUPA开源社区Y|:vG`$?]2t

*f$O P^3g:D0gv0 LUPA开源社区a"mdr;P@

LUPA开源社区J [$m0{0R(R

19)编写程序,计算10000000次的平方根,编译程序.并计算时间LUPA开源社区NzMV+i*]A

LUPA开源社区2A`8vQ o{}


im'O ?OQ)j&W$V0参考答案:
r y?Z}!_Xf3f0/*pisqrt.c*/
is"mk e2`|0# include <stdio.h>LUPA开源社区 pk8J-Z%Cb
# include <math.h>LUPA开源社区&K H,t:b?"WbZ

z^hm]WC&W&gK4z0int main (void)

"Mq9[.SWcD0 LUPA开源社区g6o&g1?P%WVC1F)]8R

{
8D {VcA0        double pi=M_PI;LUPA开源社区}+P?S"uZ
        double pisqrt;LUPA开源社区T#],V_ e/w
        long i;LUPA开源社区kG)rX#e'Ij

)Dil S3cO H0        for (i=0;i<100000000;++i){
#B5hg BSO B%^{0        pisqrt=sqrt(pi);
BB2}Y*z5[a+V7i0        }
S } O9`hHs0        return 0;LUPA开源社区E O$VPu7l}dJ\
}LUPA开源社区$Zk Cq|j3T1WT

LUPA开源社区1l(ac|9oC1n

gcc -o pisqrt pisqrt.c -lmLUPA开源社区 G }!gL7D Y/JN3W"i

LUPA开源社区~+Bt!t"kk6W f|

 

j`9Y*wD0

0s3U$X/P'q+V_ v0 LUPA开源社区1]QY:y'?|g

LUPA开源社区7N&bJkn

20)编译以上程序,用O1/O2/O3三个级别做编译,分别统计时间

c.Yz t;]8N0 LUPA开源社区4lk2LHZ

参考答案:LUPA开源社区#D1y*Ml#Ooh ~~
gcc pisqrt.c -o pisqrt1 -lm -O1
^ \ Ze$w0gcc pisqrt.c -o pisqrt2 -lm -O2LUPA开源社区 n9P"j,a Y6F
gcc pisqrt.c -o pisqrt3 -lm -O3LUPA开源社区K({;Y Nw7@~8C`

LUPA开源社区C Z&YPz CIj

time ./pisqrt1;time ./pisqrt2;time ./pisqrt3LUPA开源社区[!i$jTQ,i;}

LUPA开源社区 r8^W3v} `O+y

 LUPA开源社区lX/rZ$t

W;J&_S6_0 LUPA开源社区8U^a G"M C4b

LUPA开源社区z-X.eXcy

21)编译first.c程序,加入调试选项,但只做回溯和堆栈转储之用LUPA开源社区8rpU)sWr1SU

LUPA开源社区9[#c&A+qR uu2m,A

参考答案:LUPA开源社区#dgb$oo`r$z
gcc -g1 first.c -o first1

B g(U(ur*_:Q7P0 LUPA开源社区Ph'z s/Y"J1j

 LUPA开源社区7cqJ:Bh$x'oV~

LUPA开源社区%zU&k K'jA

 LUPA开源社区Q G+Z.[ e.j{1x

Fy9}R$o{c J.hy022)编译first.c程序,加入调试选项,在包括上述信息的基础上加入符号表,行号以及局部和外部变量信息LUPA开源社区8d"U'A(yp8\

LUPA开源社区V!i%Ha Z

参考答案:
\ue?U0gcc -g2 first.c -o first2LUPA开源社区4F\E"P0H"EF

LUPA开源社区 orr6zS ~/v}k]

 

"~$?/Iqlg0

)V\]Pnr B0 

3aKV zQW*s0

?fX@6y2nvt.T/qU023)编译first.c程序,加入调试选项,在包括上述信息的基础上加入源代码中定义的宏LUPA开源社区Btk6e'IZ W N([!P pj

E-eKt7t!m$A0参考答案:LUPA开源社区8Z:eGT O/P$t\
gcc -g3 first.c -o first3

iM/I"K MD@,@0 LUPA开源社区^1} w R*J8z

 LUPA开源社区/b"NljV"w+xc#see

7^.F:zB6Eo~ E)b0 

Z$?*i8j3mm'Y$p0 LUPA开源社区0r#KO,StCy

24)编译first.c程序,同时显示编译过程碰到的每个函数LUPA开源社区2n"u#{\f3a} aL

LUPA开源社区 Zs1i:I*oA vCU8[

参考答案:LUPA开源社区C p'Si;F)dP)b
gcc -Q first.c -o firstq

8R OI!U.z%XL0aPp0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-07  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 18936
  • 日志数: 60
  • 建立时间: 2007-07-22
  • 更新时间: 2008-07-30

RSS订阅

Open Toolbar