摘要: ##运算符用于在预处理器粘连两个标识符 ##的连接作用实在预处理期完成的,因此只在宏定义中有效 编译器不知道##的连接作用 用法: #define BB(a, b) a##b int BB(a, 1); //int a1; a1 = 2; #运算符用于预处理期将宏参数转换为字符串 #的转换作用是在预 阅读全文
posted @ 2023-05-28 21:42 ys_nana 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 为什么需要内存对齐? --CPU对内存的读取不是连续的,而是分成块读取的,块的大小只能是1、2、4、16、。。。字节 --当读取操作的数据未对齐,则需要两次总线周期来访问内存,因此性能会大打折扣 --某些硬件平台只能从规定的相对地址处读取特定类型的数据,否则产生硬件异常 #pragma pack用于 阅读全文
posted @ 2023-05-28 21:29 ys_nana 阅读(15) 评论(0) 推荐(0) 编辑
摘要: #error用于生成一个编译错误消息 用法:#error message --message不需要用双引号包围 #error编译指示符用于自定义程序员特有的编译错误消息,#error是一种预编译器指示符,可用于提示编译条件是否满足 ifndef _cplusplus #error This file 阅读全文
posted @ 2023-05-28 20:54 ys_nana 阅读(23) 评论(0) 推荐(0) 编辑
摘要: #include的本质是将已经存在的文件内容嵌入到当前文件中 #include的间接包含同样会产生嵌入文件内容的操作 条件编译可以解决头文件重复包含的编译错误 #ifndef _HEADER_FILE_H #define _HEADER_FILE_H //source code #endif --条 阅读全文
posted @ 2023-05-28 20:43 ys_nana 阅读(9) 评论(0) 推荐(0) 编辑
摘要: #define --是预处理器处理的单元实体之一 --定义的宏可以出现在程序的任意位置 --定义之后,代码可以使用这个宏 注意: --宏表达式被预处理器处理,编译器不知道宏表达式的存在 --宏表达式没有任何的“调用”开销 --宏表达式用“实参”完全替代形参,不进行任何运算 --宏表达式中不能出现递归 阅读全文
posted @ 2023-05-28 20:22 ys_nana 阅读(9) 评论(0) 推荐(0) 编辑