C/C++ 编程语言
文章平均质量分 77
王慧勇a
积累和成长
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C 指针用法辨析及汇总
——读 Kenneth A. Reek 著《C 和指针》的总结需要明确的是,指针的内容是其所指向的地址,间接访问操作符访问的是指针指向的地址,作为左值时,就是那个位置,作为右值时,就是那个位置的值。指向整型变量的指针指向整型变量的指针类型的变量,没啥好解释的。int *pointer;指向整型常量的指针指针的内容,也就是指向的常量的地址可变,即该指针可以指向另一个整型常量,但指向的整型值各自是不变的原创 2016-06-25 14:40:57 · 372 阅读 · 0 评论 -
C 扩展关键字
gcc 扩展关键字__attribute__设置函数属性, 变量属性, 数据类型属性等, 向编译器提供更多数据, 帮助编译器执行优化描述函数属性使用 addr2line 工具分析源代码, 统计程序的运行状态void fun() __attribute__ ((regparm(0))); //不需要通过任何寄存器来传递参数, 参数只是通过堆栈来传递voi原创 2016-11-04 12:25:20 · 957 阅读 · 0 评论 -
C 指针
1 C 指针指针的内容是其所指向的地址,间接访问操作符访问的是指针指向的地址,作为左值时,就是那个位置,作为右值时,就是那个位置的值。&, 取地址运算符, 引用运算符*, 间接访问运算符, 解引用运算符不能使用变量指针指向常量的地址, 因为既然通过变量名不能改变变量值, 而通过指针变量也应该是不可以的, 可以通过强制类型转换(const_cast)突破此限制 primer p222只有一层原创 2016-11-04 12:24:18 · 609 阅读 · 0 评论 -
C 预处理指令
1 宏定义 #define #undef1.1 宏定义概述宏定义指令定义了一个标识符(宏名)及一个字符串, 在源程序中每次遇到该标识符时, 均以定义的字符串替换它(宏替换)宏名和参数间不能有空格, 标识符和字符串间可有任意空格字符串中应习惯对宏参数加上括号, 这样使用宏时, 如果实参是表达式,则不易出错宏替换只作宏名和参数替换,不做计算,不做表达式求解宏一旦被定义后, 其宏名即可成为其它宏原创 2016-11-04 12:23:36 · 428 阅读 · 0 评论 -
C 函数声明, 函数原型, 函数定义
函数声明的发展1 隐式函数声明 implicit function declarationmain 函数和 printf 函数返回值类型为 int, 若不声明, 编译器默认函数返回值为 int 类型C90标准起,这种写法就步入了被逐步抛弃的过程(尽管当时还没有完全立即废止)C99废除了隐式函数声明法则(remove implicit function declaration), 省略main(原创 2016-11-04 12:22:49 · 10616 阅读 · 0 评论 -
C 函数库及头文件
1 函数库库本质上是一种经过编译的可执行二进制代码,可以被操作系统载入内存执行。Linux 和 Windows 等不同平台编译环境不同, 函数库不兼容。1.1 静态库 Static Library静态是指每个用到该库的应用程序都拥有一份自己的库拷贝静态库在程序编译时会被连接到目标代码中,可执行程序的体积较大, 程序运行时将不再需要该静态库, 可以删除库文件静态库生成: 使用 ar (ar原创 2016-11-04 12:22:01 · 704 阅读 · 0 评论 -
C 函数的可变参数列表
函数参数传递方式GCC 编译器在汇编过程中,调用 C 语言函数时,传递参数有两种方法:通过寄存器(默认)通过堆栈(使用 asmlinkage 宏)可变参数列表必须保存在栈中#define asmlinkage __attribute__((regparm(0)))asmlinkage int printk(const char *fmt, ...)告诉 GCC 编译器该函数使用0个寄存器参原创 2016-11-04 12:20:51 · 605 阅读 · 0 评论 -
C 语言基本概念
概述for 循环和 while 循环本质上是等价的通过地址找到一个值, 通过类型解释一个值, 这就是为什么数组名的地址同数组的第一个元素的地址, 但使用 sizeof 和 & 访问到的则是整个数组的长度和地址类对象是基于结构的 c++ primer plus 7.8 p236C 标准C89C95C99C11常量const 修饰的常变量, 本质上仍旧是变量, 字面值才是真正的常量,原创 2016-11-04 11:59:24 · 795 阅读 · 1 评论 -
C 程序文件
elf(exective linked file)elf 格式文件是一种为 Linux 系统所采用的通用文件格式, 支持动态链接和重定位, 有很大的文件头flatflat 格式文件是扁平格式的文件, 对文件头和一些段信息做了简化, 可执行程序小, 适于嵌入式系统文件格式转换elf2flt 就是将 elf 格式转换为 flt 格式, 在编译器链接的时候可使用 “-elf2flt” 选项直接编译出 fl原创 2016-11-04 11:57:38 · 599 阅读 · 0 评论 -
内存中堆和栈
栈栈是机器系统提供的数据结构, 现代计算机(串行执行机制)都直接在代码底层支持栈的数据结构, 有专门的寄存器指向栈所在的地址, 有专门的机器指令完成数据入栈出栈的操作栈的特点是效率高, 支持的数据类型有限, 一般是整数, 指针, 浮点数等系统直接支持的数据类型, 并不直接支持其他的数据结构子程序的调用就是直接利用栈完成的, 机器的 call 指令里隐含了把返回地址压入栈, 然后跳转至子程序地址原创 2016-11-04 11:55:15 · 353 阅读 · 0 评论 -
C 程序的内存空间布局
C 程序的内存空间布局表格中, 从上到下为高地址到低地址方向 segment 含义 argument and environment 命令行参数和环境变量(环境表和环境字符串) stack 栈 heap 堆 bss 未初始化数据段 data 初始化数据段 text 正文段1. 自由存储区: C++中, 堆是由 new 和 delete 管理的,原创 2016-11-04 11:54:20 · 2214 阅读 · 0 评论 -
stdarg(3) variable argument lists 可变参数列表
1. 可变参数列表的实现GCC 编译器在汇编过程中,调用 C 语言函数传递参数有两种方法:通过堆栈通过寄存器(默认)若想通过堆栈传递参数,需在定义 C 函数时在函数前加上宏 asmlinkageasmlinkage int printk(const char *fmt, ...)正常来讲,函数原型中具有确定的参数类型和数量,保证了函数调用的准确性。如果在调用函数时,使用不同类型的不同数量的参数原创 2016-07-15 18:18:12 · 435 阅读 · 0 评论 -
IEEE POSIX 标准
1. 必须的头文件 头文件 说明 aio.h cpio.h dirent.h 目录项 dlfcn.h fcntl.h 文件控制 fnmatch.h glob.h grp.h iconv.h 代码集变换实用程序 langinfo.h monetary.h netdb.h nl_t原创 2016-07-02 12:31:38 · 1138 阅读 · 0 评论 -
ISO C 标准
ISO C 库可以分成24个区(头文件) 头文件 说明 assert.h complex.h ctype.h errno.h 出错码 fenv.h float.h 浮点常量及特性 inttypes.h iso646.h limits.h 实现常量 locale.h math.h setj原创 2016-07-02 12:04:34 · 1014 阅读 · 0 评论 -
restrict 关键字
restrict 关键字是在ISO/IEC 9899:1999中更新的。restrict 关键字告诉编译器,哪些指针引用是可以优化的,其方法是指出指针引用的对象在函数中只通过该指针进行访问。原创 2016-07-02 11:47:50 · 375 阅读 · 0 评论 -
C 关键字
C reserved keywords存储类型说明符 storage-class specifier keywords meaning auto automatic duration storage-class specifier with no linkage extern static duration storage-class specifier with either原创 2016-11-04 12:25:55 · 501 阅读 · 0 评论
分享