程序环境和预处理的基本认识
我们通常都是在集成开发环境(IDE)下编写程序,通过IDE中编译器,链接器,调试器,加载器,最后形成了一个可执行文件。
我们需要更详细的了解该过程是怎么实现的,我们就需要在Linux系统下认识。
Linux中一些简单指令:
ls ---- 列出当前文件夹的所以文件 cd ---- 更改(切换)目录
mkdir ----- 创建目录(文件夹) rm -R ---- 删除目录文件(文件内有内容)
touch ---- 创建文件 pwd ----- 打印当前工作目录
gedit ---- 编译器 gcc ----- 编译
..................
通过一些简单的指令,我们可以查看“预处理”,“编译”,“汇编”,“链接”各阶段文件的内容。
1.预处理 ( gcc -E test.c -o test.i)
[[email protected] class]$ touch test.c
[[email protected] class]$ gedit test.c
[[email protected] class]$ gcc test.c
[[email protected] class]$ ll
total 12
-rwxrwxr-x. 1 admin admin 4642 Oct 21 13:55 a.out
-rw-rw-r--. 1 admin admin 69 Oct 21 13:54 test.c
-rw-rw-r--. 1 admin admin 0 Oct 21 13:53 test.c~
[[email protected] class]$ ./a.out
hello linux!
[[email protected] class]$ gcc -E test.c -o test.i
[[email protected] class]$ gedit test.i
如上我们可以看到,通过 gcc -E test.c -o test.i ,可以看到预处理中宏替换,注释的去除,条件编译的实现。
2.编译 (该过程中,把C语言翻译成汇编语言) (gcc -S test.i -o test.s)
[[email protected] class]$ gcc -S test.i -o test.s
[[email protected] class]$ gedit test.s
3.汇编 (该过程把汇编语言翻译成二进制语言) ( gcc -c test.s -o test.o)
[[email protected] class]$ gcc -c test.s -o test.o
二进制文本需要库来打开,有兴趣的可以去查查怎么打开二进制文本。
4.链接(目标文件和链接库,链接形成可执行文件)
以上就是在Linux下实现程序如何变成可执行文件的。希望对大家了解C语言程序环境有所帮助。
在C语言中,有几个为系统默认的预定义符号,即使你使用#ifdef 来重新定义,它还是会维持它系统默认的值。
__FILE__ 当前编译的源文件
__LINE__ 当前__LINE__所在的行号
__DATE__ 文件被编译的时间(日期)
__TIME__ 文件被编译的时间(时分秒)
# 和 ## 的功能:
#define SWAP(m)\
(((m&(0x55555555))<<1)|((m&(0xAAAAAAAA))>>1))
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m = 5;
printf("奇数位和偶数位交换后:%d\n",SWAP(m));
system("pause");
return 0;
}