社区
C++ 语言
帖子详情
如何在代码中设置一个开关,使得不执行某些代码行,比如说用来进行LOG输出的代码行?
jzp12
2008-04-03 03:42:08
#if 0
#endif
这种就算了,因为代码中LOG输出的代码行太多。
...全文
299
18
打赏
收藏
如何在代码中设置一个开关,使得不执行某些代码行,比如说用来进行LOG输出的代码行?
#if 0 #endif 这种就算了,因为代码中LOG输出的代码行太多。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hoohag
2008-04-03
打赏
举报
回复
直接#define ERRORLOG就可以打开开关了, 不要写就是关掉开关. 至于#define FORRELEASRLOG(LINE) 0 不会有任何问题, 只是你所有LOG的地方全变成0; 这个代码会被编译器忽略掉, 不会编到目标文件里.
hoohag
2008-04-03
打赏
举报
回复
[Quote=引用 16 楼 jzp12 的回复:]
嗯,谢谢诸位,特别是hoohag ,在你的定义前面加个
#define ERRORLOG 0;
就能打开开关吧,但是如果没有打开开关的话,所在的LOG输出语句的值就是0,这会不会有什么风险,对后面的代码会有影响吗?
[/Quote]
#define ERRORLOG 0;不会有任何风险,放心用好了.
jzp12
2008-04-03
打赏
举报
回复
嗯,谢谢诸位,特别是hoohag ,在你的定义前面加个
#define ERRORLOG 0;
就能打开开关吧,但是如果没有打开开关的话,所在的LOG输出语句的值就是0,这会不会有什么风险,对后面的代码会有影响吗?
zsyddl2
2008-04-03
打赏
举报
回复
和上面 有 几楼的 做法一样
zsyddl2
2008-04-03
打赏
举报
回复
#ifdef _DEBUG
#define TRACE printf
#else
#define TRACE
#endif
这样 当不定义_DEGBUG的时候 就 没有任何多余代码
使用
TRACE("....");和printf一样使用
风云剑客
2008-04-03
打赏
举报
回复
可以定义一个变量开关,然后定义printf()的操作宏,这样可以实现楼主的功能,最好自己定义一个公共的头文件来实现。
#include <stdio.h>
const bool OUT_LOG = 0 ;
#define printf(a) if (OUT_LOG) printf(a) else //不进行操作或换成另外的操作
int main()
{
printf("text");
return 0;
}
hoohag
2008-04-03
打赏
举报
回复
在工程属性里面加上 /D "_ERRORLOG"就是打开, 不加就是关闭
至于开销问题, 虽说不大, 但假如一个程序里面有1万次调用, 调用函数LOG(), 带来的性能损失还是有的, 站在工程的角度来看, 能不编译进去的代码, 尽量不要编到目标文件中. 同时在外面人看来, 既看不到LOG()源代码的人, 你的函数里面加了宏, 可使用的人并不知道里面的宏是怎样, 这样容易理解上的偏差, 我们尽量应该让自己的代码友好一点, 用FORERRORLOG(LOG()); 可以清楚的告诉任何人, LOG()函数是否起作用是和某个宏相关的,这样如果需要关注得的人会去注意这个宏, 这个应该比把宏加在函数内部要友好很多.
jzp12
2008-04-03
打赏
举报
回复
那个开销太大,
TO:hoohag
能否再明示一下?
taodm
2008-04-03
打赏
举报
回复
既然楼主自己的方法已经可以用了,还有啥好问的呢。
jzp12
2008-04-03
打赏
举报
回复
那如何打开_ERRORLOG这个LOG的开关?如何关闭这个开关?
hoohag
2008-04-03
打赏
举报
回复
[Quote=引用 7 楼 jzp12 的回复:]
就是只要一个开关使得执行或者不执行代码行中
printf("");
这样的输出语句。
[/Quote]
但是这样还是有一次函数调用的开销呀....
jzp12
2008-04-03
打赏
举报
回复
就是只要一个开关使得执行或者不执行代码行中
printf("");
这样的输出语句。
hoohag
2008-04-03
打赏
举报
回复
我的做法是先有下面的宏定义
#ifdef _ERRORLOG
#define FORERRORLOG(LINE) LINE
#else
#define FORERRORLOG(LINE) 0
#endif
然后把使用LOG()的地方全部改成
FORERRORLOG(LOG());
然后_ERRORLOG可以作为LOG的开关
laolaoliu2002
2008-04-03
打赏
举报
回复
#define OUTPUT_LOG
Supper_Jerry
2008-04-03
打赏
举报
回复
整体用宏。
rageliu
2008-04-03
打赏
举报
回复
楼上这样,只需要NEED_LOG一个就控制全了
HelloDan
2008-04-03
打赏
举报
回复
判断句
qmm161
2008-04-03
打赏
举报
回复
汗一个
#ifdef NEED_LOG
#define LOG()\
{printf(...)...}
#else
#define LOG()
#endif
使用VSCode
进
行
linux内核
代码
阅读和开发
使用VSCode
进
行
linux内核
代码
阅读和开发现状新的方法安装与配置1.安装VSCode2.安装Remote - SSH插件3.添加远程主机4.安装clangd5.在远程服务器安装bear6.配置clangd7.触发clangd工作效果遇到的问题总结参考链接 现状 Linux内核由于其本身
代码
量庞大,其
中
又包含各种平台宏定义
开关
/配置,外加各种结构体指针的注册,这使得阅读内核
代码
变成一件令人头疼的事。针对这个问题目前常见的解决方案有以下几种: 使用简单的文本浏览工具 + grep
进
行
代码
搜索浏览,这种方
为什么要阅读源
代码
?如何有效的阅读源
代码
? 选一些比较优秀的开源产品作为源
代码
阅读对象?
盛大TeamHost上有个关于学习开源项目的wiki :http://www.teamhost.org/projects/learn-with-open-source/wiki/Wiki 一、为什么要阅读源
代码
? 很多作家成名之前都阅读过大量的优秀文学作品,经过长期的阅读和写作积累,慢慢的才有可能写出一些好的、甚至是优秀的文学作品...
代码
审计[java安全编程]
SQL注入 介绍 注入攻击的本质,是程序把用户输入的数据当做
代码
执
行
。这里有两个关键条件,第一是用户能够控制输入;第二是用户输入的数据被拼接到要
执
行
的
代码
中
从而被
执
行
。sql注入漏洞则是程序将用户输入数据拼接到了sql语句
中
,从而攻击者即可构造、改变sql语义从而
进
行
攻击。 漏洞示例一:直接通过拼接sql @RequestMapping("/SqlInjection/{id}") public M...
log
日志的使用
做
一个
苦逼的Java攻城师, 我们除了关心系统的架构这种high level的问题, 还需要了解一些语言的陷阱, 异常的处理, 以及日志的
输出
, 这些"鸡毛蒜皮"的细节. 这篇文章是JCP成员, Tomasz Nurkiewicz( http://nurkiewicz.b
log
spot.com/ )总结的10条如何正确使用日志的技巧(参见原文). 跟那篇" java编程最差实践"一样, 也是针对一...
Log
日志框架的学习.正确使用日志的10个技巧
1)选择正确的
Log
开源框架 在
代码
中
为了知道程序的
行
为的状态, 我们一般会打印一条日志:
log
.info("Happy and carefree
log
ging"); 在所有的日志框架
中
, 我认为最好的是SLF4J. 比如在
Log
4J
中
我们会这样写:
log
.debug("Found " + records + " recor
C++ 语言
64,683
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章