C语言真的很不容易学,我从刚开始接触C语言,到现在两年多了,这两年学得很卖力,但仍不敢说完全理解了,甚至不敢说“理解了”。别看C语言只有区区32个关键词,语法规则也简单得很,但其中包含的东西太多太多了,很多东西需要程序员在长期编程实践中细心体会。
有些概念我在学C语言期间一直没有理解,学了x86汇编之后才有些明白了,回过头来想当时不理解是理所应当的。所以,我觉得C程序员都有必要从汇编和计算机原理的层面理解一下C语言内涵的一些东西。
这些问题主要是围绕C语言的几个关键词产生的,还包括一些附加的修饰词(比如__stdcall)
有些概念我在学C语言期间一直没有理解,学了x86汇编之后才有些明白了,回过头来想当时不理解是理所应当的。所以,我觉得C程序员都有必要从汇编和计算机原理的层面理解一下C语言内涵的一些东西。
这些问题主要是围绕C语言的几个关键词产生的,还包括一些附加的修饰词(比如__stdcall)
- extern 的含义: extern 表示一个内部使用的符号(变量或函数)的定义或实现不在本文件中,要求编译器将源文件中凡是用到这个变量或函数(的地址)时都用一个特定的符号来表示,编译成目标文件(.obj或.o),当程序与其它目标文件链接的时候再将这个符号表示的地址替换为实际值。
- static 修饰符的作用:函数中使用和函数外使用的含义是截然不同的。
(1) 函数内修饰变量,表示这个变量是私有于本函数的全局变量,变量初始化是在程序载入时完成的,不占用本函数的堆栈空间,函数返回后变量不丢失;
(2) 函数之外修饰变量或函数,表示这个变量或函数仅属于本文件(编译生成的目标),不可于其它目标文件链接,也就是本文件中的一个私有全局变量或私有函数。 - __inline 修饰
- register 编译器建议: 仅仅是“建议”,是否“采纳”取决于编译器
- volatile 编译指示
- __stdcall, __fastcall, __cdecl 等对编译结果的影响