社区
C++ 语言
帖子详情
如何在代码中设置一个开关,使得不执行某些代码行,比如说用来进行LOG输出的代码行?
jzp12
2008-04-03 03:42:08
#if 0
#endif
这种就算了,因为代码中LOG输出的代码行太多。
...全文
324
18
打赏
收藏
如何在代码中设置一个开关,使得不执行某些代码行,比如说用来进行LOG输出的代码行?
#if 0 #endif 这种就算了,因为代码中LOG输出的代码行太多。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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内核
代码
阅读和开发
Linux内核由于其本身
代码
量庞大,其
中
又包含各种平台宏定义
开关
/配置,外加各种结构体指针的注册,这使得阅读内核
代码
变成一件令人头疼的事。针对这个问题目前常见的解决方案有以下几种: 使用简单的文本浏览工具 + ...
为什么要阅读源
代码
?如何有效的阅读源
代码
? 选一些比较优秀的开源产品作为源
代码
阅读对象?
一、为什么要阅读源
代码
? 很多作家成名之前都阅读过大量的优秀文学作品,经过长期的阅读和写作积累,慢慢的才有可能写出一些好的、甚至是优秀的文学作品...
代码
审计[java安全编程]
第二是用户输入的数据被拼接到要
执
行
的
代码
中
从而被
执
行
。sql注入漏洞则是程序将用户输入数据拼接到了sql语句
中
,从而攻击者即可构造、改变sql语义从而
进
行
攻击。 漏洞示例一:直接通过拼接sql @RequestMapping(&...
阿里面试:SpringBoot启动时, 如何
执
行
扩展
代码
?你们项目 SpringBoot
进
行
过 哪些 扩展?
阿里面试:SpringBoot启动时, 如何
执
行
扩展
代码
?你们项目 SpringBoot
进
行
过 哪些 扩展?
掌握批处理文件调用技巧:从直接到间接
执
行
goto命令允许脚本跳转到标签处
执
行
代码
,这在复杂的条件分支和错误处理
中
非常有用。其基本语法如下:goto label标签定义的格式是:labelName,脚本
执
行
到这个标签时会继续
执
行
下面的命令。例如::loopgoto loop此
代码
...
C++ 语言
65,192
社区成员
250,525
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章