C++ 内置宏定义 与 预编译指令
内置宏和预编译指令, 在代码调试、单元测试、跨平台代码中经常会用到。这里记录一下。
1. 内置宏
(文件名,当前行号,当前日期,当前时间,当前执行方法名)
__FILE__
__LINE__
__DATE__
__TIME__
__FUNCTION__
2.预编译指令
可以防止头文件被多次引用
可以方便解决代码跨平台编译问题
可以根据自定义变量灵活执行程序
等等,许多好处
效果可以看代码实例:
test.h
#ifndef __TEST_H
#define __TEST_H #include <iostream> class Test{
public:
Test(int _val){
this->val = _val;
} void print(){
std::cout << "the val is " << this->val << std::endl;
std::cout << "function:" << __FUNCTION__ << std::endl;
std::cout << "line:" << __LINE__ << std::endl;
} #ifdef CODE_TEST //如果定义了CODE_TEST, 则声明为public; 否则为private
public:
#else
private:
#endif
int val;
}; #endif
main.cpp
#include "test.h" //test.h使用了预编译
#include "test.h" int main(){
Test t();
t.print(); #ifdef CODE_TEST //如果定义了CODE_TEST, 则会执行下面到代码
std::cout << "t.val = " << t.val << std::endl;
#endif return ;
}
执行:
C++ 内置宏定义 与 预编译指令的更多相关文章
- 获取gcc和clang的内置宏定义
下面是对Gcc的内置宏定义的解释: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html https://github.co ...
- 查看GCC的内置宏定义
开发过程中我们常常需要使用宏定义.. 为了尽可能多的使用GCC为我们提供的特性,首先我们需要知道gcc提供了那些特性... gcc -dM -E - < /dev/null 没错,就这么一句话就 ...
- Unity各平台内置宏定义
属性 方法 UNITY_EDITOR #define directive for calling Unity Editor scripts from your game code. UNITY_EDI ...
- C:预编译指令
预编译 关于编译 参考 关于宏定义 参考 预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预 ...
- c语言中条件编译相关的预编译指令
一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编 ...
- c语言编译器内置宏
注:转自http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html 感谢分享 前言: 我们在写程序的时候,总是 ...
- 编译器内置宏__LINE__&__FUNCTION__
编译器内置宏: 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): ...
- 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)
各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
随机推荐
- Spring中数据绑定的两种方式(BeanWrapperImpl或者DataBinder)
import org.apache.shiro.authc.AuthenticationToken; import org.springframework.beans.*; import org.sp ...
- Redis介绍及部署在CentOS7上(一)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- SDC_ETL融合数据产品白皮书
SDC_ETL融合数据产品白皮书 http://www.sefonsoft.com/?s=/home/pro/pdf/id/48.html
- VB.NET中lambda的写法
lambda 或者叫匿名方法 '有返回值的匿名函数,func前面输入参数,最后一个输出参数 Dim func1 As Func(Of Integer, Integer) = Function(ByVa ...
- flask 中的request
request.args 从URL地址中的参数request.form POST请求时 从FormData中获取参数reque ...
- zookeeper 节点启动时的更新机制
使用zk的应用节点和zk数据本身的同步,当系统启动时使用zk配置的信息和zk本身存储不一致, 此时应存在一个更新机制将应用配置数据和zk数据更新一致. 启动时更新拉取zk配置中心的更新本地数据,以zk ...
- BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)
题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...
- poj 3071 概率dp
转自:cxlove 题目:有2^n个队,相邻的两两打淘汰赛,,求最后哪个队夺冠的概率最大 dp[i][j]表示第i轮的时候,第j去支队伍赢的概率. 那么dp[i][j]的前提就是i-1轮的时候,j是赢 ...
- JDK版本的特性
1. 2.JDK1.5增加的是: (1) 泛型与枚举类型(枚举类型是静态,常量.里面也可以包含构造方法,成员方法,但是构造方法一定是私有的. 适合枚举的是 有限数据,封装特定的数据,), (2)注解( ...
- How to create .gitignore file in Windows Explorer
How to create .gitignore file I need to add some rules to my .gitignore file, however, I can't find ...