GCC编译器使用学习笔记(二)

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

猜你喜欢

转载自microjava.iteye.com/blog/545125