红联Linux门户
Linux帮助

Linux 下的C编程基础篇

发布时间:2006-08-18 00:57:34来源:红联作者:童勋
引用:
1:编译语法

/* hello.c */
#include"stdio.h"
#include"stdlib.h"

main(int argc,char **argv)
{
fprintf(stdout,"Hello, I am a test procedure\n");
}

[root@kcn-110]#gcc -c hello.c

-c:只输出目标代码

[root@kcn-110]#gcc -o hello hello.c

-o:输出名字为hello的可执行程序

[root@kcn-110]#gcc -g -o hello hello.c

-g:输出的可执行程序带有调试信息

2:Makefile

(1) head1.h

/* head1.h */
#ifndef INC_HEAD1_H
#define INC_HEAD1_H
void print1(char *c);
#endif

(2) print1.c

/* print1.c */
#include"head1.h"
#include"stdio.h"
void print1(char *c)
{
fprintf(stdout,"%s\n",c);
}

(3) head2.h

/* head2.h */
#ifndef INC_HEAD2_H
#define INC_HEAD2_H
void print2(char *c);
#endif

(4) print2.c

/* print2.c */
#include"head2.h"
#include"stdio.h"
void print2(char *c)
{
fprintf(stdout,"%s\n",c);
}

(5) main.c

/* main.c */
#include"head1.c"
#include"head2.c"
main(int argc,char **argv)
{
print1("hello, I am the first print string");
print2("hello, I am the second print string");
}

(6) Makefile

/* Makefile */
main:main.o print1.o print2.o
gcc -o main main.o print1.o print2.o
main.o:main.c head1.h head2.h
gcc -c main.c
print1.o:print1.c head1.h
gcc -c print1.c
print2.o:print2.c head2.h
gcc -c print2.c clean: rm *.o

(7) another Makefile

/* another Makefile */
main:main.o print1.o print2.o
gcc -o $@ $^
main.o:main.c head1.h head2.h
gcc -c $<
print1.o:print1.c head1.h
gcc -c $<
print2.o:print2.c head2.h
gcc -c $<

Makefile 的格式是:

目标文件:依赖文件
(TAB)规则
$@:目标文件
$^:所有的依赖文件
$<:第一个依赖文件



引用:
1: c_char.c

/* c_char.c */
#include
#include
char *testChar="Hello,I am a test string\n";
void main(int argc,char **argv)
{
testChar[0]='c';
fprintf(stdout,"%s",testChar);
}

2: compile c_char.c

[root@kcn-110]#gcc -o c_char c_char.c

[root@kcn-110]#./c_char

Segment Fault

3: c_char_1.c

/* c_char_1.c */
#include
#include
char testChar[]="Hello,I am a test string\n";
void main(int argc,char **argv)
{
testChar[0]='c';
fprintf(stdout,"%s",testChar);
}

4: compile c_char_1.c

[root@kcn-110]#gcc -o c_char c_char_1.c

[root@kcn-110]#./c_char_1

Hello,I am a test string

[root@kcn-110]#

5: change c_char.c to c_char.s

[root@kcn-110]#gcc -S c_char.c

[root@kcn-110]#vim c_char.s

change .rodata to .data

[root@kcn-110]#gcc -o c_char_s c_char.s

[root@kcn-110]#./c_char_s

Hello,I am a test string

[root@kcn-110]#

字符串testChar定义后被放在了.rodata中,不可以修改,所以会出错

在汇编代码中将.rodata改为了.data就可以避免这个错误,或者开始声明为字符串数组
文章评论

共有 0 条评论