c编译成a跟o的区别
㈠ gcc-c和-o有什么区别
-c和-o都是gcc编译器的可选参数。
-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。-o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序。
例如:
gcc -c test.c将生成test.o的目标文件
gcc -o app test.c将生成可执行程序app
gcc -c a.c -o a.o表示把源文件a.c编译成指定文件名a.o的中间目标文件(其实在这里,把-o a.o省掉,效果是一样的,因为中间文件默认与源文件同名,只是后缀变化)。
1、如果GCC不带-C参数,编译一个源代码文件(test.c)。那么会自动将编译和链接一步完成,并生成可执行文件。可执行文件可以有-o参数指定(test.o)
2、如果是多个文件,则需要先编译成中间目标文件(一般是.o文件),在链接成可执行文件,一般习惯目标文件都是以.o后缀,也没有硬性规定可执行文件不能用.o文件。
(1)c编译成a跟o的区别扩展阅读:
gcc:GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
基本用法:
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。
㈡ c语言编译过程及工程下的.c文件.h文件.o文件.so文件.a文件
C语言的编译过程是一个将源代码转化为可执行文件的复杂步骤,主要由GCC编译器执行。GCC不仅是一个编译器,它在命令行环境下运行,通过gcc命令实现源文件的编译和链接。在工程中,源代码通常以.c和.h文件形式存在,而编译过程会生成.o文件(目标文件)和.so文件(共享对象文件),有时还会使用.a文件(静态库)。
首先,GCC支持一次性编译和链接。以生成可执行文件为例,通过在命令行中输入gcc命令,如`gcc demo.c -o a.out`,即可直接生成名为a.out的可执行文件。还可以使用-o选项自定义文件名,如`gcc demo.c -o main.out`或省略后缀`gcc demo.c -o main`。运行程序则只需在终端中输入程序名。
然而,GCC也支持分步编译,这涉及预处理、编译、汇编和链接四个阶段。预处理阶段处理宏定义、头文件和条件编译,使用`gcc -E hello.c -o hello.i`。编译阶段检查语法并生成汇编代码,用`gcc -S hello.i -o hello.s`。汇编阶段将.s文件转换为.o文件,`gcc -c hello.s -o hello.o`。最后,链接阶段将所有.o文件(或库)整合为可执行文件,如`gcc hello.o -o hello`。
通过理解这些步骤,开发者可以灵活地控制编译过程,根据需要进行每个阶段的操作,以满足不同项目的需求。在实际编程工程中,熟练掌握GCC的这些用法对于高效开发至关重要。
㈢ C语言的1和0有什么区别
C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”。 比如:a、b的值分别是0、4,则a||b的值为1,a&&b的值为0。
但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。比如:a=4,因为a的值为非0,被认作“真”,所以对它进行“非”运算!a=0 。
其实语句是否执行由用户的代码(即判断条件)决定的,而系统只用0和非0进行判断,当用户认为此句可执行,系统判断为“真”,反之亦然 。
比如:while(ch!='#'){语句序列;}
ch!='#'为判断条件
假如ch='A',这可执行大括号中语句序列(系统判断为“真”)
当ch='#',不可执行大括号中的语句序列(系统判断为“假”)
(3)c编译成a跟o的区别扩展阅读:
在c语言中,任何等于零的东西都被认为是假,任何等于非零值的东西都被认为是真,因此,最常见的定义就是假为0,真为1。
在缺省情况下,枚举类型的第一个元素被赋值为O,因此,在上述枚举定义中,FALSE被赋值为0,TRUE被赋值为1。