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 //保存中间文件