您的位置:首页 > 编程语言 > C语言/C++

C语言杂谈

2015-08-27 13:36 387 查看
附上原始排版链接:点我

溢出

溢出有以下几种(不全):

- 数组溢出

- 数溢出

- 指针溢出

- 缓冲区溢出

- 栈溢出

变量的生命周期和存储位置

全局变量 和 静态(Static)变量在静态区,存在与整个运行周期。



#pragma()

#pragma once

这是一条相对重要的预编译指令

打个比方,我看到很多早期的程序员似乎不知道有这条指令 #pragma once ,他们会用各种说辞为自己开脱

#pragme ocne            // 该文件只包含一次,一般放在头文件的最上方
等同于
#ifndef DEBUG
#define DEBUG
xxxxxxxx
#endif // DEBUG


下面的这种可以做版本控制 但是我一般会另外写宏,个人还是推荐写
#pragma ocne
,版本控制另外写宏

#pragma hdrstop

预编译头到此为止,后面的头文件不进行编译

#pragma warming(disable:xxxx;once:xxxx;error:xxxx)

这个就不说了,一般用来忽略警告

#pragma comment()

一般用来链接静态库

#pragma pack()

选择数据对齐方式

例如
#pragma pack(1)
一字节对齐,一般成对出现,可以压缩 结构体的大小

#pragma code_seg()

写壳或者 之类的 PE 工具可能会用到,指定代码段的位置

#pragma alloc_text()

将函数放入指定代码段中,我看过一个例子是在写 SMC 加密时用到过

位域|位段

这个概念是很多初学者容易忽略的概念。

位域中比较麻烦的要数其大小与对齐。

计算的最后,结构的总大小要是最大成员的整数倍。

Static

修饰变量,变量会存储于静态区,故不受到栈回收机制的影响。

修饰函数,表示本函数不能被其他文件使用。

以上是一点点杂谈,可能依旧有错误不足之处,请多包涵,如果可以的话也请你能给予指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: