GCC编译器使用学习笔记(二)
Shared vs Static Libraries
--标准C
vi ansi.c
#include<stdio.h>
int main(void)
{
const char asm[] = "6502";
printf("the string asm is '%s'.\n",asm);
return 0;
}
gcc -Wall -ansi ansi.c -o ansi //-ansi:标准c编译
vi pi.c
#include<math.h>
#include<stdio.h>
int main(void)
{
printf("pi is %f.\n",M_PI);
return 0;
}
gcc -Wall -ansi -D_GNU_SOURCE pi.c -o pi
gcc -Wall pi.c -o pi
vi v.c
#include<stdio.h>
int main(int argc,char* argv[])
{
int i,n=argc;
double x[n]; //可变数组在标准c中不允许
for(i=0;i<n;i++)
x[i]=i;
return 0;
}
gcc -Wall -ansi -pedantic v.c //检测程序严格按照标准c
--gcc参数 -Wall
-Wcomment:检测注释是否嵌套
-Wformat: 检测格式是否正确
-Wunused:检测没有用过的变量
-Wimplicit:检测是否声明
-Wreturn-type:检测返回值是否正确
-W
-Wconversion
-Wshadow
-Wcast-qual
-Wwrite-strings
-Wtraditional
注释方式:
/* */:不允许嵌套
#if 0
#end if:可以有嵌套
--预处理
宏定义
#define MAX 1024 + 128
i=MAX*2 等效 i=1024 +128*2
vi def.c
#include<stdio.h>
int main(void)
{
#ifdef TEST
printf("Test mode.\n");
#endif
printf("Running...\n");
return 0;
}
gcc -Wall -DTEST def.c -o dt
gcc -Wall def.c -o ndt
查看宏定义
cpp -dM /dev/null
vi dm.c
#include<stdio.h>
int main(void)
{
printf("NUM is %d.\n",NUM);
return 0;
}
gcc -Wall -DNUM=123 dm.c -dm
gcc -Wall -DNUM="1+2" dm.c -dm
--只预处理,不编译
vi bj.c
#define TEST "Hello,Beijing!"
const char str[] = TEST;
gcc -E bj.c
gcc -Wall -c -save-temps hello.c //保存中间文件