Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366999
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类: C/C++

2009-02-09 15:31:58

  副程式的编译
  如果我们在一个主程式里面又呼叫了另一个副程式呢!?这是很常见的一个程式写法, 因为可以简化整个程式的易读性!在底下的例子当中,我们以 thanks.c 这个主程式去呼叫 thanks_2.c 这个副程式,写法很简单:

  # 1. 先编辑原始码 thanks.c 与 thanks_2.c:
  [root@linux ~]# vi thanks.c
  #include
  int main(void)
  {
  printf("Hello World\n");
  thanks_2();
  }
  # 上面的 thanks_2(); 那一行就是呼叫副程式啦!

  [root@linux ~]# vi thanks_2.c
  void thanks_2(void)
  {
  printf("Thank you!\n");
  }
  # 上面这两个档案您可以到底下下载:
  #
  #

  # 2. 开始将原始码编译成为可执行的 binary file :
  [root@linux ~]# gcc -c thanks.c thanks_2.c
  # 产生了两个目标档!且编译过程里面可能会产生一些 warning (警告) 的讯息,
  # 因为仅是警告而已,所以该讯息你可以先略过去不打紧的! ^_^
  [root@linux ~]# gcc -o thanks thanks.o thanks_2.o
   (把目标档编译成执行档
  # 3. 执行一下这个档案:
  [root@linux ~]# ./thanks
  Hello World
  Thank you!

  知道为什么要制作出目标档了吗?!由于我们的原始码档案有时并非仅只有一个档案, 所以我们无法直接进行编译。这个时候就需要先产生目标档,然后再以连结制作成为 binary 可执行档。(注意:加参数-c是产生目标档,加参数-o是产生执行档。)另外,如果有一天,您更新了 thanks_2.c 这个档案的内容,则您只要重新编译 thanks_2.c 来产生新的 thanks_2.o ,然后再以连结制作出新的 binary 可执行档即可!而不必重新编译其他没有更动过的原始码档案。 这对于软体开发者来说,是一个很重要的功能,因为有时候要将偌大的原始码全部编译完成, 会花很长的一段时间呢!

  此外,如果您想要让程式在执行的时候具有比较好的效能,或者是其他的除错功能时, 可以在编译的过程里面加入适当的参数,例如底下的例子:

  [root@linux ~]# gcc -O -c thanks.c thanks_2.c
  # -O 为产生最佳化的参数

  [root@linux ~]# gcc -Wall -c thanks.c thanks_2.c
  thanks.c: In function 'main':
  thanks.c:5: warning: implicit declaration of function 'thanks_2'
  thanks.c:6: warning: control reaches end of non-void function
  thanks_2.c: In function 'thanks_2':
  thanks_2.c:3: warning: implicit declaration of function 'printf'
  thanks_2.c:3: warning: incompatible implicit declaration of built-in function 'printf'
  # -Wall 为产生更详细的编译过程资讯。上面的讯息为警告讯息( warning )
  # 所以不用理会也没有关系!

  至于更多的 gcc 额外参数功能,就得要 man gcc 啰~呵呵!可多的跟天书一样~

阅读(816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~