引用: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就可以避免这个错误,或者开始声明为字符串数组