函数前使用extern没有意义;extern用在变量前表示变量是一个外部链接符号。(函数天然是一个外部链接符号)
——与此相关的,指定函数的调用风格(__cdecl, __stdcall, __fastcall)等,或者生成动态连接库时(__declspec(dllimport)、__declspec(dllexport)),或者指定编译语言类型时(C, C++)时,都只需要在 声明体(.h文件) 中说明,不需要在实现体(.c文件)中说明。
同时,static对于函数和变量的意义也不同。
对于C而言,源文件内、函数体外的static视为“文件域”可见,而C++中没有这样的说法,类、函数体外可见,即全局可见!
static用在函数内部,表示这个变量对于函数的每次调用持久存在;
static用在类成员上,表示这个变量总是采用类名::变量名形式访问,对于类的每个实例总是可见,相当于有限可见的全局变量,类似C语言的文件域。
const用在形参上,表示函数对它不做写操作;
const用在成员函数后,表示函数不对成员变量做写操作;
const用在成员变量上,表示变量不允许任何函数对它做写操作,因此必须在函数体外初始化:
构造器初始化期间——普通变量,RAM区,实例的stack内;
或者类的静态区初始化期间——静态const变量,RAM区,全局,但是需要加类名域访问;
或者编译建立符号表期间——整型静态const变量,ROM区
区别于宏定义——编译后即变为多个立即数,没有存储空间,而是蕴藏在.text指令中。
数组的特殊性:??
非可移植的内存分配技巧:(要求平台的malloc库实现时采用连续分配,用途:概要访问,隐式存储)
struct name {
int namelen;
char namestr[1];
};
#include <stdlib.h>
#include <string.h>
struct name *makename( char *newname )
{
struct name *ret = malloc(sizeof(struct name)-1 + strlen(newname) + 1);
if (ret != NULL) {
ret->namelen = strlen(newname);
strcpy(ret->namestr, newname);
}
return ret;
}
C99引入了许多C++中已有的特性:结构体越来越像 类 了——可以创建无名的临时 结构体变量
结构体的sizeof值是内存占用范围,“空洞”也计算在内
如何计算field在struct中的字节偏移量?
非可移植方案:#define offsetof(struct, f) (size_t) ( (char*) (struct*)0->f - (char*) (struct*)0 )
不要使用内建的==或!= 来比较结构体变量——编译器对齐操作可能会导致结构体的稀疏,出现空洞
结构体中的位域如何使用?
struct {
BYTE :4; //最低4位不用(Intel little-endian,即最前面的字节)
BYTE a:4; //注意,每个位域都不能跨越8bit边界
BYTE b:2;
}x;//其中类型为BYTE即可
在需要指针型的地方,如何传入一个常量?
如intf(int *)函数,怎样传入一个常量? ——在C99中,可以使用“复合字面量”:f( (int[]){5} ); 类似Java??
函数名本质上也是一个地址,类似数组名; 函数指针本质上也是一个可以参与 赋值、算术 的变量。 () 是唯一可以用于函数指针的后缀运算符。
不同的是,函数名、函数指针的地址实际上是代码区或者说ROM的地址,而数据变量名、数据指针的地址实际上是数据区RAM的地址,二者不能通用。例如,空的函数指针为void (*)(),空的数据变量指针为void *;
NULL没有想象中的省力——在函数参数传入时,仍然需要使用类型转换。
一般来说,NULL仅仅是一个提示:这里是一个指针0,没有其他意义。所以,在不需要指针的地方(如ASCII空字符:'\0')不要用它。
使用规则:
1、在需要空指针常量时,用0或NULL都是等价的;
2、在函数调用传入0时,根据原型在0或NULL前添加强制转换;
为什么需要NULL?因为NULL(表示空指针)在某些平台上实现为0,而在另一些平台上用特殊值来实现——为什么C标准不把它统一定义为0?因为在某些平台上用特殊值来触发自动的硬件陷阱,可以捕捉到空指针非法访问的错误,统一用0实现空指针是一种不幸的倒退。
数组并非C语言一级元素,下标也并非一级运算符,而是定义在指针算术运算基础上——因此,a[i] 等价于 *( (a) + (i) ),也等价于 i[a]。
通过定义不同类型(主要是维数)的指针p,关联数组a后,可以对p实现++或--不同粒度的重载。
一本C语言的习题汇编:
C Programming FAQs, Steve Summit, 人民邮电2008
分享到:
相关推荐
高质量程序设计指南--C++/C语言(第3版)]-[林锐.pdf
林锐的高质量程序设计指南——C++/C语言,绝对的PDF完全版。
本书共17章,第1章到第4章重点介绍软件质量和基本的程序设计方法;第5章到第16章重点阐述c++/c编程风格、面向对象程序设计方法和一些技术专题;第17章阐述stl的原理和使用方法。
c++/C语言 后端学习 基础学习 基础资料,c带书签
主要介绍C++/C语言中进制转换的相关函数,以及一些对字符串处理的函数,并给出了一些实例
你有过惧怕C++/C语言指针的光荣历史吗?我是有过的。这篇29页的小册子让你改变历史,让你不再怕指针。 学习C++/C语言的人,没有曾经不怕指针的。这份29页材料对指针的几乎所有应用场合进行了解析,让你再也不怕指针...
《高质量程序设计指南:C++/C语言(第3版)》以轻松幽默的笔调向读者论述了高质量软件开发方法与C++/C编程规范,而这也是作者多年从事软件开发工作的经验总结。全书共17章,第1章到第4章重点介绍软件质量和基本的...
适用于C++/C语言初学者相关代码的开发,本软件无需安装,下载解压后,只需在Microsoft Visual Studio\Common\MSDev98\Bin目录下找到MSDEV.EXE运行文件,双击运行即可。
C++/C语言 实现图书信息管理系统,包括增、删、改、查,以及人员借阅和归还操作,并管理藏书数量。将产生的数据记录在文件中,下次程序启动可以读取继续操作
《高质量程序设计指南——C++ C语言(第3版)》.pdf 扫描版 个人觉得很经典的一本书,有时间可以仔细看看,分享给大家! 仅限自学,勿用于商业用途!
这浙大江是林锐博士的高质量程序设计指南-C++/C语言(第1版) 内容实用,贴近工程。 本人第一次上厂上传,支持一下哦。
林锐博士编写的高质量C++/C编程,很不错的,很多公司的笔试题都是这上面得!
电子书 高质量程序设计指南——C++_C语言(第二版)
高质量程序设计指南C++C语言 .
本书共17章,第1章到第4章重点介绍软件质量和基本的程序设计方法;第5章到第16章重点阐述c++/c编程风格、面向对象程序设计方法和一些技术专题;第17章阐述stl的原理和使用方法。
C、C++学习资源,需要的同学可以再联系我,我这里还有
适用于C / C++语言的程序开发、编译、调试,内容全部免费,仅供大家方便,无商用,请大家放心下载!
免费共享给各位好友,此版本是在PDG格式中转为PDF,有两页由于PDG不能打开,因此PDF没有此两页,但此两页不重要
高质量程序设计指南 c++_c语言.rar
高质量程序设计指南-C++.C语言.3rd 解压密码:1234567890