`

C++之__LINE__, __FILE__, __FUNCDNAME__宏定义

c++ 
阅读更多
直接上结果


代码如下
#include <iostream>
#include <typeinfo>
#include <iomanip>
/*
@file 学习__LINE__,  __FILE__, __FUNCDNAME__  等宏定义的用法
@link http://msdn.microsoft.com/zh-cn/library/b0084kay.aspx
@link http://www.cnitblog.com/zouzheng/archive/2007/08/31/32691.aspx
*/

#pragma region 测试 函数名的三个宏,不是ANSI的标准宏
void testFunctionMacro (int a, float b) {
	std::cout << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCTION__" << "  :  " << __FUNCTION__ << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCDNAME__" << "  :  " << __FUNCDNAME__ << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCSIG__" << "  :  " << __FUNCSIG__ << std::endl;
}

void testFunctionMacro (int a) {
	std::cout << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCTION__" << "  :  " << __FUNCTION__ << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCDNAME__" << "  :  " << __FUNCDNAME__ << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCSIG__" << "  :  " << __FUNCSIG__ << std::endl;
}

// Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
void testFunctionMacro() {
	std::cout << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCTION__" << "  :  " << __FUNCTION__ << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCDNAME__" << "  :  " << __FUNCDNAME__ << std::endl;
	std::cout << std::left << std::setw(16) << "__FUNCSIG__" << "  :  " << __FUNCSIG__ << std::endl;
}
#pragma endregion

#pragma region 测试__LINE__等宏,ANSI的标准宏
void test__ANSI__Macro() {
	std::cout << std::left << std::setw(16) << "__FILE__" << "  :  " << __FILE__ << std::endl;
	std::cout << std::left << std::setw(16) << "__LINE__" << "  :  " << __LINE__ << std::endl;
	std::cout << std::left << std::setw(16) << "__DATE__" << "  :  " << __DATE__ << std::endl;
	std::cout << std::left << std::setw(16) << "__TIME__" << "  :  " << __TIME__ << std::endl;
	std::cout << std::left << std::setw(16) << "__TIMESTAMP__" << "  :  " << __TIMESTAMP__ << std::endl;
	
}
#pragma endregion


void main() {
	test__ANSI__Macro();
	std::cout << std::endl;

    testFunctionMacro (1, 2);
    testFunctionMacro (1);
    testFunctionMacro();
}
  • 大小: 50.7 KB
分享到:
评论

相关推荐

    __FILE__,__LINE__,FUNCTION__实现代码跟踪调试1

    为了提高代码的可读性和可维护性,可以将这些宏封装到宏定义中。在`global.h`中,定义了`DEBUGFMT`和`DEBUGARGS`两个宏。`DEBUGFMT`是格式化字符串,用于拼接文件名、行号和函数名;`DEBUGARGS`则包含了`__FILE__`, ...

    c++ 编程 几个有用的宏详解

    1. 打印错误信息 ...__FILE, __LINE, __FUNCTION是由编译器预定义的宏,其分别代表当前代码所在的文件名,行号,以及函数名。 可以在代码中加入如下语句来跟踪代码的执行情况: if(err) { printf(%s(%d)-%s\

    C_语言专题_预编译和宏定义.doc

    ### C语言专题:预编译和宏定义 #### 一、概述 在C语言编程中,预编译处理是编译过程的一个重要组成部分,它在真正的编译开始之前执行一系列特殊的任务,包括宏定义、文件包含和条件编译等。预编译处理能够提高...

    C宏定义.doc

    在C/C++编程中,宏定义是预处理指令的一个重要组成部分,它允许程序员创建自定义的标识符,以便在代码中进行文本替换。宏定义通过`#define`关键字实现,可以极大地方便代码的编写和维护,同时也为条件编译等高级特性...

    腾讯公司C_C++笔试题(08年或之前).doc

    给出的宏定义如下: ```cpp #define MAX(a, b) ((a) - (b)) ? (((a) - (b)) &gt;&gt; (sizeof(a) * 8 - 1) ? b : a ``` 这个宏利用了溢出的性质来进行比较。当a大于b时,(a-b)的结果为正数,在右移操作中,高位的符号位会...

    常用宏定义

    在编程领域,宏定义是C/C++等编程语言中预处理指令的一部分,它允许程序员创建简短的符号名称(宏)来代表复杂的表达式或代码块。这些宏可以在编译时进行替换,从而提高代码的可读性和可维护性。在"常用宏定义"这个...

    C++ 自定义调试信息的输出.doc

    例如,你可以定义一个`_DEBUG`宏来表示调试版本,并在其中定义另一个宏`DEBUG_TO_FILE`,当`DEBUG_TO_FILE`被启用时,调试信息将写入文件,否则输出到标准输出。下面是一个简单的示例: ```cpp // debug.c #include...

    C语言宏定义技巧大全

    在C语言中,宏定义是预处理器(Preprocessor)的一项重要功能,它允许程序员创建简短的别名或...同时,随着C++的发展,许多宏定义的功能已被模板和 inline 函数所取代,但在某些特定场景下,宏定义仍然是不可或缺的。

    腾讯c/c++笔试题

    #### 题目一:宏定义比较两个数的大小 **题目描述**: 定义一个宏`Max`,用于比较两个数`a`、`b`的大小,但不能使用大于、小于、if语句。 **给出的宏定义**: ```c++ #define Max(a,b) ( a/b)?a:b ``` **解析**...

    日志类一个简单的C++日志类

    在IT行业中,日志类是常见的工具,用于记录程序运行时的信息...通过宏定义,我们可以方便地在代码中插入日志语句,同时保持代码整洁。在实际项目中,可以根据需求对这个基础框架进行扩展和优化,以满足特定系统的需要。

    腾讯公司C_C++笔试题

    1. 宏定义:题目中的MAX(a, b)宏定义用于比较两个数的大小,且不能使用大于、小于或if语句。这里利用了异或和右移操作来实现。当a &gt; b时,(a) - (b)的结果在符号位上为1,右移后依然是1,因此条件表达式返回a;反之...

    一个不错的日志系统(smarlog.zip)

    在上述代码中,`__FILE__`、`__LINE__`和`__FUNCTION__`是预定义的宏,分别代表当前源文件名、行号和函数名,方便记录上下文信息。 除了基本的日志记录,一个优秀的日志系统还应考虑性能和可扩展性。为了保证性能,...

    Visual C++ MFC中常用宏的含义.pdf

    - 断言失败时,会输出形如“assertion failed in file &lt;filename&gt; line ”的错误信息,其中`&lt;filename&gt;`和`&lt;lineno&gt;`分别表示发生断言失败的文件名和行号。 --- #### ASSERT_VALID **宏定义:** ```cpp ASSERT_...

    C/C++ 标准库函数 (中文版)

    预定义变量__LINE__和__FILE__可以在程序中使用,分别表示当前源代码的行号和文件名。 预处理还包括条件编译命令#if、#ifdef、#ifndef、#else、#elif和#endif,这些命令允许编译器在满足特定条件时才编译代码的部分...

    GCC中的预处理指令分析

    预处理阶段是GCC编译过程中的一个重要环节,它负责处理源代码中的宏定义、条件编译等特性。本文将深入分析GCC中的预处理指令及其内部实现机制。 #### 二、预处理指令概述 预处理指令是GCC在正式编译之前执行的一...

    关于预处理指令的介绍

    预处理指令是编译过程的第一步,它在源代码被实际编译成机器语言之前进行处理,主要负责宏定义、条件编译、文件包含等任务。预处理指令以“#”字符开头,这一符号在C和C++等编程语言中扮演着至关重要的角色。 ### ...

    c++封装日志类及源代码

    在C++中,我们可以使用`__LINE__`宏获取当前源码的行号。 6. **时间戳**:为了跟踪日志的生成时间,通常会在每个日志条目前添加当前时间。可以使用C++标准库中的`std::chrono`模块来获取当前时间戳。 下面是一个...

    C++笔试题(二)

    在C++中,宏定义是一种预处理指令,用于实现简单的文本替换。本题要求定义一个宏来比较两个整数a和b的大小,但又不允许使用大于、小于这样的比较操作符或if语句。 **解决方案:** ```cpp #define Cmp(x, y) compare...

    C++工程师106道面试题总结.pdf

    在C++中,有多种调试宏,如__FILE__表示文件名,__LINE__表示行号,__FUNCTION__表示函数名。单例模式是指一个类只有一个实例,并提供一个全局访问点。在多线程环境下,实现线程安全的单例模式需要考虑同步机制。 ...

    IT公司C++笔试题

    【IT公司C++笔试题】是许多IT公司在招聘过程中经常使用的筛选人才的方式,涉及的知识点广泛,主要包括C++的基础语法、常量与宏定义的区别、数组与指针的特性、类成员函数的重载、覆盖和隐藏的区别,以及一些编程技巧...

Global site tag (gtag.js) - Google Analytics