C++ 内置宏定义 与 预编译指令

内置宏和预编译指令, 在代码调试、单元测试、跨平台代码中经常会用到。这里记录一下。

1. 内置宏

(文件名,当前行号,当前日期,当前时间,当前执行方法名)

__FILE__
__LINE__
__DATE__
__TIME__

__FUNCTION__

2.预编译指令

可以防止头文件被多次引用

可以方便解决代码跨平台编译问题

可以根据自定义变量灵活执行程序

等等,许多好处

 

效果可以看代码实例:

test.h

 1 #ifndef __TEST_H
 2 #define __TEST_H
 3
 4 #include <iostream>
 5
 6 class Test{
 7 public:
 8     Test(int _val){
 9         this->val = _val;
10     }
11
12     void print(){
13         std::cout << "the val is " << this->val << std::endl;
14         std::cout << "function:"   << __FUNCTION__ << std::endl;
15         std::cout << "line:"       << __LINE__ << std::endl;
16     }
17
18 #ifdef CODE_TEST    //如果定义了CODE_TEST, 则声明为public; 否则为private
19 public:
20 #else
21 private:
22 #endif
23     int val;
24 };
25
26 #endif

main.cpp

 1 #include "test.h"   //test.h使用了预编译
 2 #include "test.h"
 3
 4 int main(){
 5     Test t(5);
 6     t.print();
 7
 8     #ifdef CODE_TEST    //如果定义了CODE_TEST, 则会执行下面到代码
 9         std::cout << "t.val = " << t.val << std::endl;
10     #endif
11
12     return 0;
13 }

 执行:

 

时间: 2024-07-28 21:45:57

C++ 内置宏定义 与 预编译指令的相关文章

求解内置宏C/C++_LIN_(gcc/g++)

问题描述 求解内置宏C/C++_LIN_(gcc/g++) #include using namespace std; void main() { cout<<_LINE_<<endl; } error: '_LINE_' was not declared in this scope std::cout<<_LINE_<<std::endl; 解决方案 试试 LINE 前后的下划线都是两个. 解决方案二: 这个宏是用于调试的时候打印代码的在源文件的行数的,应

IOS代码运行的磨刀石-预编译指令

IOS中代码运行的磨刀石--预编译指令 所谓预编译,就是程序代码在编译之前,开发工具为我们预先做的一些工作.不要小瞧这些指令,没有它们,我们的代码可能寸步难行. 一.文件包含相关预处理命令 #include <header> #include "header" C语言中使用的包含文件的指令""和<>的区别为,""是从当前目录开始寻找文件,<>是从系统库中寻找文件.这两个指令不能使头文件循环引入,也不能重复包含同

C#必备知识之预编译指令

预编译又称为预处理,是做些代码文本的替换工作.处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令. 下面对C#中的预编译指令进行介绍: 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值,可以将它看为一个符号而已.#undef就是删除这个符号的定义.如果符

《嵌入式C编程:PIC单片机和C编程技术与应用》一第3章预编译指令3.1 标准预编译指令

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第3章,第3.1节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 第3章 Embedded C Programming: Techniques and Applications of C and PIC MCUS 预编译指令 编译器对C程序的处理可以明确地分为两步.第一步由预编译器完成.以#开头的预编译指令可能会影响编译器设置或者进行

利用预编译指令防止代码重复编译

 看下面一段代码     #include "test.h"   //看到这句我们重复了 三次 按照我们以往的编写 我们可能认为 他会出现变量函数 等重复定义的错误   在一个文件中这样写显然是不好  我这里是做演示 因为我们在大型项目开发中很有可能的重复包含 同一个头文件 为了防止错误的发生我们要再 头文件中利用#idndef  #ifdef 等预编译指令 来处理代码   #ifdef identifier #ifndef identifier   identifier标示符 可以使

Delphi中预编译指令的使用方法

在Delphi中,也有与C相似的预编译指令,虽然该类指令只在当前的单个文件有效(也有可能是笔者未全面了解该类指令的真正用法),但是这一类指令对于进行多版本的制作工作(如从标准版中出学习版),确实有着相当不错的用途. 一.指令介绍: 1.DEFINE指令: 格式:{$DEFINE 名称} 说明 :用于定义一个在当前单元有效的符号(Symbol).定义了 之后可以使用IF DEF和IFNDEF指令来判断该符号是否存在. 2.UNDEF指令:格式:{$UNDEF 名称}说明:用于取消一个在当前单元已经

Delphi 中的预编译指令

  Delphi 中的预编译指令 在Delphi中,也有与C相似的预编译指令,虽然该类指令只在当前的单个文件有效(也有可能是笔者未全面了解该类指令的真正用法),但是这一类指令对于进行多版本的制作工作(如从标准版中出学习版),确实有着相当不错的用途.  一.指令介绍:  1.DEFINE指令:  格式:{$DEFINE 名称}  说明 :用于定义一个在当前单元有效的符号(Symbol).定义了之后可以使用IF DEF和IFNDEF指令来判断该符号是否存在.  2.UNDEF指令:  格式:{$UN

《嵌入式C编程:PIC单片机和C编程技术与应用》一1.4 C预编译指令

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.4节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 1.4 C预编译指令 预编译是C语言中一个非常有意思的特性.预处理使用工具(预处理器)在编译前先扫描一遍代码,并对代码做出相应的修改从而生成用来编译的代码.预编译指令由#开始,占用一整行.在第3章中将会详细介绍它.在上面的例子中,#include指令将文件(e3.h)的

C#中的预编译指令介绍

原文:C#中的预编译指令介绍 1.#define和#undef      用法:           #define DEBUG           #undef DEBUG     #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值,可以将它看为一个符号而已.#undef就是删除这个符号的定义.如果符号DEBUG没定义过,则#undef不起作用,否则#define不起作用.二者都必须放在源代码之前.二者的顺序看代码的顺序:     #define D