副程式的编译
如果我们在一个主程式里面又呼叫了另一个副程式呢!?这是很常见的一个程式写法, 因为可以简化整个程式的易读性!在底下的例子当中,我们以 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) |