首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无论构建类型如何,宏__FILE__、__LINE__和__PRETTY_FUNCTION__都可以工作吗?

无论构建类型如何,宏FILELINEPRETTY_FUNCTION都可以工作。

FILE是一个预定义宏,用于获取当前源文件的文件名。它返回一个字符串,表示当前源文件的路径和文件名。

LINE是另一个预定义宏,用于获取当前源文件中的行号。它返回一个整数,表示当前代码所在的行号。

PRETTY_FUNCTION是GCC编译器特有的宏,用于获取当前函数或方法的名称。它返回一个字符串,表示当前函数或方法的完整名称。

这些宏在编译时会被替换为对应的值,因此无论构建类型如何(例如调试模式、发布模式、静态库、动态库等),它们都可以正常工作。

在云计算领域中,这些宏可以用于日志记录、错误处理和调试等方面。通过在日志中输出FILELINE,可以方便地定位代码中的问题所在。而PRETTY_FUNCTION则可以用于输出函数或方法的名称,帮助开发人员更好地理解代码的执行流程。

腾讯云相关产品中,与日志记录和错误处理相关的产品包括云原生日志服务(CLS)和云函数(SCF)。云原生日志服务提供了全面的日志管理和分析能力,可以帮助用户实时监控和分析日志数据。云函数是一种无服务器计算服务,可以根据事件触发执行代码,用户可以在函数中使用这些宏来记录日志和处理错误。

云原生日志服务(CLS)产品介绍链接:https://cloud.tencent.com/product/cls 云函数(SCF)产品介绍链接:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(五)如何编写高性能日志

这也就是服务器端日志客户端日志的区别之一,客户端程序日志一般可以在直接在所在的工作线程写日志,因为这点性能时间损失对大多数客户端程序来说,是可以忽略的,但对于要求高并发(例如并发量达百万级乃至千万级的系统...Logger::GetInstance().AddToQueue("INFO", __FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) #define...Logger::GetInstance().AddToQueue("WARNING", __FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) #...Logger::GetInstance().AddToQueue("ERROR", __FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__)...当然,由于使用了两个固定长度的数组,大小是256512,如果日志数据太长,会导致数组溢出,这个可以根据实际需求增大缓冲区或者改用动态长度的string类型

1.4K80

iOS小技能:NSLog调试技巧

前言 DEBUG 区分调试模式发布模式进行特殊处理 Objective-C's boxing capability (装箱快速构造数字对象) benchmarking的时间测量 本文demo从小程序...:iOS逆向内搜NSLog获取 I 自定义preprocessor macro DEBUG 的应用场景:区分调试模式发布模式进行特殊处理 自定义preprocessor macro: The DEBUG...NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)...For example 在这里插入图片描述 平常也可以使用@ 来快速包装数字类型以对象的形式进行存储传参 在这里插入图片描述 [discountArray addObject:[[ self...验证假说(在真实设备上 benchmark)->分析结果 benchmark 代码不应该被加到终极提交的产品中,Benchmarking 应该被分离到单独的项目分支或独立的测试用例中,或者使用DEBUG 的区分调试模式发布模式进行特殊处理

85040
  • 高效易用的C++单元测试框架:轻松构建高质量代码

    概述单元测试是构建稳定、高质量的程序、服务或系统的必不可少的一环。通过单元测试,我们可以在开发过程中及时发现修复代码中的问题,提高代码的质量可维护性。...这个函数返回一个bool类型的值,表示测试是否通过。然后,它定义了一个SetResult()函数,用于设置测试结果。这个函数接受一个bool类型的参数,表示测试是否通过。...这个函数返回一个std::string类型的值,表示测试用例的名称。在这个类的构造函数中,它接受一个std::string类型的参数case_name,用于设置测试用例的名称。...UnitTestCore类提供了注册测试用例、运行测试用例等基本功能,可以帮助我们更加方便地编写管理单元测试。2.3 单测定义我们的单元测试框架预定义了一系列的,用于快速构建单元测试。...在定义中,它使用TEST_CASE_CLASS定义测试用例类,并将测试用例类的名称作为参数传递给TEST_CASE_CLASS

    61630

    【IOS开发进阶系列】IOS常用开发技巧专题

    如果po指令是一个id类型也可以正常打印。是不是感觉方便很多呀? 反正我是这么觉得。至于有没有用就看个人需要咯~~! 如何删除? 好吧, 那么问题来了, 我用命令创建, 如果不想玩了怎么办尼??...不知道VC.NET 为啥不支持 __FUNCTION__  同__func__, __PRETTY_FUNCTION__  非标准。...而VC.NET提供的函数为: __FUNCTION__ 函数,提供类名函数名称的输出。...5.1.1 Objective-C中的instancetypeid区别     instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!...1、相同点     都可以作为方法的返回类型 2、不同点 ①instancetype可以返回方法所在类相同类型的对象,id只能返回未知类型的对象; ②instancetype只能作为返回值,不能像id

    42240

    (转载)VC的内存泄漏检查

    ,在"请参见其他资源"中,打开“MFC中的内存泄漏检测”,在“MFC中的内存泄漏检测”页面下方的相关章节中,可找到“检测隔离内存泄漏”,它就是介绍如何使用 C 运行时库检测内存泄漏,链接就是上面那个链接...(s, _NORMAL_BLOCK, __FILE__, __LINE__) // 其它C内存分配函数的定义,如calloc等 #endif /* _CRTDBG_MAP_ALLOC */ 通过包括...如果更改了顺序,所使用的函数可能无法正确工作。 到这里,对malloc等的调用,都会被记录下来,但运行一遍程序,会发现,并没有打印任何泄漏信息。...1.2 对于C++分配的内存 #ifdef _DEBUG #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif 通过定义,把对new...但写成定义的话,很少人会在定义后再包含其它头文件。 四、思考: 1. 如何做到在程序结束时,如果有内存泄漏,就弹出断言。 2. 如何让检测到的泄漏报告中,包含分配时的调用栈 五,具体实施。

    1.3K20

    VC的内存泄漏检查

    ,在"请参见其他资源"中,打开“MFC中的内存泄漏检测”,在“MFC中的内存泄漏检测”页面下方的相关章节中,可找到“检测隔离内存泄漏”,它就是介绍如何使用 C 运行时库检测内存泄漏,链接就是上面那个链接...(s, _NORMAL_BLOCK, __FILE__, __LINE__) // 其它C内存分配函数的定义,如calloc等 #endif /* _CRTDBG_MAP_ALLOC */ 通过包括...如果更改了顺序,所使用的函数可能无法正确工作。 到这里,对malloc等的调用,都会被记录下来,但运行一遍程序,会发现,并没有打印任何泄漏信息。...1.2 对于C++分配的内存 #ifdef _DEBUG #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif 通过定义,把对new...但写成定义的话,很少人会在定义后再包含其它头文件。 四、思考: 1. 如何做到在程序结束时,如果有内存泄漏,就弹出断言。 2. 如何让检测到的泄漏报告中,包含分配时的调用栈 五,具体实施。

    1.8K40

    C++代码调试方式建议

    一个没有设计或者这几得很糟糕的程序,无论怎样调试,也不会成为一个合格的程序。 程序有着良好的设计的前提下,软件开发的过程中,编码错误在所难免。所有程序可能出现的错误可分为两类:语法错误逻辑错误。...具体地说,就是在调试程序的时候,利用编译器的命令行参数定义调试标记(相当于程序中用#define定义的),然后再#ifdef#endif之间包含相应的调试代码就可以了。...因此,C++提供了几个,他们分别是__FILE__、__FUNCTION____LINE__,可以利用它们“自动“获取有关模块、函数行的信息。考察如下程序。...与此相关联的问题是,如何较少的引入错误、如何有策略地使用调试手段。给出几条如下建议。 (1)采用良好的变成风格。比如,用统一的规范为变量、函数类型命名。...(3)对历史数据进行统计跟踪。每个程序员的只是背景工作习惯各不相同,通过统计历史上个人最容易出现哪些类型的编程错误,以便在将来有针对性地排查,是一种有效的提高程序质量的做法。

    1.5K30

    C++之内联函数

    大家好,又见面了,我是全栈君   C++继承C的一个重要特性是效率,在C中保护效率的一个方法是使用(macro),的实现是使用预处理器而不是编译器,预处理器直接用宏代码替换调用,所以就没有了参数压栈...、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN的时间花费,所有的工作由预处理器完成,因此不用花费什么就具有了程序调用的便利可读性。   ...内联函数与编译器   内联函数使用inline关键字定义,为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待   一般应该把内联定义在头文件中,当编译器看到这个定义时,它把函数类型...(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) ) assert()中包含...__FILE____LINE__ 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120176.html原文链接:https://javaforall.cn

    34710

    初识C语言·预处理详解

    1 预定义符号 C语言里面设置了预定义符号,在预处理阶段就被处理,有以下符号: __FILE__//进行编译的源文件 __LINE__//文件当前的行号 __DATE__//文件被编译的日期 __TIME...#define PRINT printf("%s\n%s\n%d\n%s",__FILE__,__DATE__,__LINE__,__TIME__) 这是使用续行符之前,相较于目前写的代码是比较长的,那么可以做出如下改变...: #define PRINT printf("%s\n%s\n%d\n%s",\ __FILE__,__DATE__,\ __LINE__,__TIME__) 也就是在末尾加一个\...#define PRINT printf("%s\n%s\n%d\n%s",\ __FILE__,__DATE__,\ __LINE__,__TIME__) int main()...x : y; } 首先最直观的就是函数的返回值是有类型的,这也就意味着比较的时候我们只能比较用一类的数值,反观,因为没有类型,所以可以比较不同类型的数据。

    6810

    (预编译)详解

    三、预编译详解 3.1预定义符号 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__...3.2.4 ### 1)#的作用: 思考这样一个问题:如何把参数插入到字符串当中呢?...我们来思考另一个问题:如果两个参数的类型不一样,如何能用一条语句实现呢,比如,我想要一个a为int 型,b 为float型,这样看来printf函数还是不能实现,难道还可以,没错,就是能一劳永逸!...原因有两点: 1.用于调用函数函数返回的代码可能比实际执行这个小型计算机工作所需要的时间更多,所以比函数在程序的规模速度方面更胜一筹。...2.更为重要的是,函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使用,反之这个可以适用于整形长整型浮点型等可以用于>来比较的类型类型无关。

    21410

    log4cpp深度封装

    巧妙的使用定义可以缩短函数调用形式(虽然effective c++ google C++编程规范都极力反对使用太多) #ifndef _MYLOG_H #define _MYLOG_H #include...:Category &category_ref_; }; //***************************************************** //注意: //文件名 __FILE...__ ,函数名 __func__ ,行号__LINE__ 是编译器实现的 //并非C++头文件中定义的 //前两个变量是string类型,且__LINE__是整形,所以需要转为string类型 //*...***************************************************** //整数类型文件行号 ->转换为string类型 inline std::string int2string...) called"); } 测试程序: 只需要在主函数中加入第一行语句 #define LOG4CPP (注意需要在第一行引入) 而其他头文件或实现文件中都不需要再添加任何语句引入log4cpp,都可以畅通无阻地使用了

    77130

    C语言中的定义

    由于多次计算的参数而导致的错误可能非常难于发现,因为调用函数调用看起来是一样的。更糟糕的是,这类可能在大多数情况下正常工作,仅在特定参数有副作用时失效。...下面的例子:请注意的定义中是如何将type_max相连来形成新函数名的。假如我们需要一个针对float值的max函数。...2)、我们可以使用__LINE____FILE__来找到错误。考虑下面这个检测被零除的除法的发生位置的问题。当一个C程序因为被零除而导致中止时,通常没有信息指明哪条除法运算导致错误。...(__LINE__)和文件名(__FILE__)。...记住编译程序也许还提供其它预定义的名。 __LINE__ 及 __FILE__ 指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。

    6.4K10

    【为正名】for的妙用你想不到

    本文的内容将建立在前面构筑的基础之上,以for功能的挖掘封装为契机,手把手的教会你如何正确使用来简化日常开发,增强C语言的可读性、降低应用开发的难度、同时还尽可能避免对日常代码调试带来的负面影响。...现在用的变量 i 固定是 int 类型的,如何允许用户在 init_clause 定义自己的局部变量,并允许使用自己的类型?...至此,插入 before() after() 的问题圆满解决。 问题二:如何允许用户定义自己的局部变量,并且拥有自己的类型 要解决这个问题,首先必须打破定势思维,即:for循环只能用整型变量。...执行且执行一次”的功能,然而,你们也许忘记了 init_clause 的一个特点:它还可以定义指针——换句话说,无论用户定义了什么类型,我们都可以在最后定义一个指向该类型的指针: #define using...【后记】 ---- 本文的目的,算是对【为正名】系列所介绍的知识进行一次示范——告诉大家如何正确的使用,配合已有的老的语法结构来“固化”一个新的模板,并以这个模板为起点,理解它的语法意义用户,简化我们的日常开发

    68120

    CC++代码调试的几点建议

    一个没有设计或者这几得很糟糕的程序,无论怎样调试,也不会成为一个合格的程序。 程序有着良好的设计的前提下,软件开发的过程中,编码错误在所难免。所有程序可能出现的错误可分为两类:语法错误逻辑错误。...具体地说,就是在调试程序的时候,利用编译器的命令行参数定义调试标记(相当于程序中用#define定义的),然后再#ifdef#endif之间包含相应的调试代码就可以了。...因此,C++提供了几个,他们分别是__FILE__、__FUNCTION____FILE__,可以利用它们“自动“获取有关模块、函数行的信息。考察如下程序。...与此相关联的问题是,如何较少的引入错误、如何有策略地使用调试手段。给出几条如下建议。 (1)采用良好的变成风格。比如,用统一的规范为变量、函数类型命名。...(3)对历史数据进行统计跟踪。每个程序员的只是背景工作习惯各不相同,通过统计历史上个人最容易出现哪些类型的编程错误,以便在将来有针对性地排查,是一种有效的提高程序质量的做法。

    64110

    C语言进阶(十五) - 预处理与程序编译初步解析

    同时简单介绍一个程序是如何从一行行代码到开始运行并得到结果的。 ---- 1. 预处理 1.1 预定义符号 首先是C语言内置的预定义符号。...__FILE__ 进行编译的源文件,可以记录程序所在的文件路径,是一个字符串 __LINE__ 文件当前的行号,记录__LINE__所在的行号,是一个整数 __DATE__ 文件被编译的日期,是一个字符串...此时与函数相比的优点: 用于调用函数从函数返回所花费的时间可能比实际执行这个小型计算工作所需要的时间更多。比函数在程序的规模速度方面更胜一筹。 函数的参数必须声明为特定的类型。...所以函数只能在类型合适的表达式上使用,而参数没有类型限制,适用于任何可以比较计算的类型的参数可以是类型,而函数则不行。...,只要对参数的操作是合法的,它就可以使用于任何参数类型 函数的参数是与类型有关的,如果参数的类型不同,就需要不同的函数,即使它们执行的任务是不同的 调试 不方便调试 函数可以逐语句调试 递归 不能递归

    43020

    【C语言篇】编译链接以及预处理介绍(上篇)

    编译 ⼀个C语⾔的项⽬中可能有多个 .c ⽂件⼀起构建,那多个 .c ⽂件如何⽣成可执⾏程序呢? 多个.c⽂件单独经过编译器,编译处理⽣成对应的⽬标⽂件。...总之,这仅仅是⾮常简洁地讲解了⼀个C的程序是如何编译链接,到最终⽣成可执⾏程序的过程,其实很多内部的细节⽆法展开讲解。...预处理(预编译)详解 在上面的翻译环境简单介绍了预处理的一些操作,在接下来将会比较详细的讲解一下: 预定义符号 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE...#define DEBUG_PRINT printf("file:%s\tline:%d\t \ date:%s\ttime:%s\n" ,\ __FILE__,__LINE__ , \ __DATE...二者在执行核心运算指令差不多,但函数多了调用准备工作和返回的指令 更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使⽤。

    11110
    领券