本文主要是介绍C文件如何成为可执行文件(编译、链接、执行)——摘自《程序员的自我修养》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文算是我阅读《程序员的自我修养》(俞甲子等著)相关章节的笔记,文中直接引用了原书中的叙述,强烈建议大家去看原书,本文只做概要介绍而用。
——注:文中有很多引用图的地方,请大家自己去找原书看,支持正版!
我遇到一个问题,Linux C编程中的问题:
..
char *p;
unsigned int i = 0xcccccccc;
unsigned int j;p = (char *) &i;
printf("%.2x %.2x %.2x %.2x\n", *p, p[1], p[2], p[3]);memcpy(&j, p, sizeof(unsigned int));
printf("%x\n", j);
...Output:ffffffcc ffffffcc ffffffcc ffffffcc
0xccccccccMy questions are:1. Why it prints "ffffffcc ffffffcc ffffffcc ffffffcc"? (if p is
unsigned char* then it will print correctly "cc cc cc cc")
2. Why pointer to char p copied to j correctly, why not every member
in p overflow? since it is a signed char.
这是别人在邮件列表中提出的问题,在试图回答这个问题的过程中,突然发现,自己对连接器的工作并不熟悉,因此拿来好书《程序员的自我修养》来看,并做如下汇报,强烈推荐《程序员的自我修养》!!!
写好的C语言文件,最终能够执行,大致要经过预处理、编译、汇编、链接、装载五个过程。
预编译完成的工作:
(1)将所有的"#define"删除,并展开所有的宏定义
(2)处理所有条件预编译指令
这篇关于C文件如何成为可执行文件(编译、链接、执行)——摘自《程序员的自我修养》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!