#define

无参数的宏定义的一般形式为:#define 标识符 字符序列

如:#define TRUE 1

注意事项:

1.之作字符序列的替换工作,不作任何语法的检查

2.如果宏定义不当,错误要到预处理之后的编译阶段才能发现

带参数宏定义:#define 标识符(参数表)字符序列

如:#define MAX(A, B) ((A) > (B)?(A):(B))

代码 x = MAX(p, q)将被替换成 y = (p) > (q)? (p):(q)

注意:

1.宏名标识符与左圆括号之间不允许有空白符,应紧接在一起

2.宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换

3.为了避免出错,宏定义中给形参加上括号

4.末尾不需要分号

5.define可以替代多行的代码,记得后面加 \,如:

#define MALLOC(n, type)\
((type*)malloc((n)*sizeof(type)))

头文件

分别写在不同的文件中

重复包含的问题

#ifndef (XXX)

#define XXX

内存分配与释放

int* ptr;  //声明指针

//在堆中申请内存,分配128个int
ptr = (int*)malloc(sizeof(int)*128); //无论申请的空间大小 一定要进行校验 判断是否申请成功
if (ptr == NULL)
{
return 0;
} //初始化分配的内存空间
memset(ptr, 0, sizeof(int)*128); //使用
*(ptr) = 1; //使用完毕 是否申请的堆空间
free(ptr); //将指针设置为NULL
ptr = NULL;

文件读写相关函数

1.fopen函数

2.fseek函数

3.ftell函数

4.fclose函数

自我检测

1.用十六进制文本编辑器,打开一个记事本的.exe文件,再打开在内存中的记事本进程,记录下这两个文件的不同。

2.将记事本的.exe文件读到内存,并返回读取后在内存中的地址

3.将内存中的数据存储到一个文件中,(.exe格式),然后双击打开,看是否能够使用。

零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写的更多相关文章

  1. 【编程基础】C语言常见宏定义

    我们在使用C语言编写程序的时候,常常会使用到宏定义以及宏编译指令,有的可能比较常用,有的可能并不是很常用,是不是所有的C语言宏定义以及宏指令你都清楚呢? 指令 用途详细介绍 # 空指令,无任何效果 # ...

  2. 零基础逆向工程15_C语言09_位运算

    1.汇编中的移位指令 算数移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm SAL(Shift Arithmetic Left):算数左移 SAR(Shift Arithmetic ...

  3. 零基础逆向工程12_C语言06_switch语句反汇编

    12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. ...

  4. 零基础逆向工程14_C语言08_指针02_反汇编

    1.指针数组 5: char* keyword[] = {"if", "for", "while", "switch"} ...

  5. 零基础逆向工程13_C语言07_指针01_反汇编

    1."带*类型"的特征探测 宽度 在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位. 声明 1.带有* 的变量类型的标准写 ...

  6. 零基础逆向工程11_C语言05_结构体

    结构体小结 结构体是按照分配的大小,局部变量会自动数据对齐 1字节对齐,省空间,但cpu查找效率低 4字节对齐,不省空间,但cpu查找效率高 VC6默认的结构对齐大小 项目右键-> settin ...

  7. 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)

    前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...

  8. C语言中宏定义(#define)时do{}while(0)的价值(转)

    C语言中宏定义(#define)时do{}while(0)的价值 最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总 ...

  9. c语言的预处理指令分3种   1> 宏定义   2> 条件编译   3> 文件包含

    宏简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 所有的预处 ...

随机推荐

  1. 动态库*.so制作

    转自:http://www.2cto.com/os/201308/238936.html 在linux下制作动态库*.so.   1.linux下动态库的制作 //so_test.h #include ...

  2. oracle 日期问题 网上找到自己查阅时方便

    第一部分:oracle sql日期比较: oracle sql日期比较:在今天之前: select*from up_date whereupdate< to_date('2007-09-07 0 ...

  3. 转:isualvm远程监控Tomcat

    一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. JVM 监控工具 Java VisualVM .jvisua ...

  4. 慕课网java就业班级

    家里电脑教程路径: F:\教程\java-慕课 开发工具路径: D:\java 公司电脑:开发工具路径 J:\java\开发工具 教程路径: G:\学习中\廖雪峰的java教程\1-Java快速入门\ ...

  5. 19.Consent视图制作

    新建consentController 继承Controller并引用命名空间 给他一个get的Action Index 添加一个Index的View 新建一个ConsentViewModel 再新建 ...

  6. mysql由浅入深探究(三)----mysql增删改查

    通过前两节的学习,目前我们已经完成了数据库的安装,用户的创建及权限操作等相关操作,但是我们似乎我们只是隐隐约约接触到了数据库的一些基本操作,对数据库表还是比较陌生.那么现在我们呢开始了解一些数据库的一 ...

  7. Fitnesse框架简单介绍

    1.Fitnesse是什么? 官方的说明:FitNesse is a wiki server. It's also a test execution engine. Fitnesse是一个wiki s ...

  8. [poj]2488 A Knight's Journey dfs+路径打印

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45941   Accepted: 15637 Description Bac ...

  9. css 实现垂直水平居中常用方法

    html <div class="outer"> <div class="inner"></div> </div> ...

  10. 初步了解XMLHttpRequest对象、http请求的封装

    构造器 var xhr = new XMLHttpRequest() 设置超时时间 xhr.ontimeout= 设置超时时间为 1s 设置超时时间(单位:ms) 0为永不超时 HTTP 请求的状态 ...