怎么用宏区分n64还是o32

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用宏区分n64还是o32相关的知识,希望对你有一定的参考价值。

参考技术A 被打上了nintendo的LOGO的是n64(((

用宏定义代替printf函数

问题提出

有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会。我们总不能对每一条printf都这样写:

1 #if _DEBUG_
2 printf("hello world!");
3 #endif

这样子实在是太麻烦了!万一要各个地方都要打印,会使版面看起来很乱。

解决方法

我后来想到一个方法,可以使用宏定义代替printf函数,由于printf是可变参数的函数,这里就要用到变參宏(…和__VA_ARGS__)。 
在头文件下写此代码

1 #define _DEBUG_ 1
2 
3 #if _DEBUG_
4 #define PR(...) printf(__VA_ARGS__)
5 #else
6 #define PR(...) 
7 #endif

后面需要打印调试信息的时候使用PR宏就可以了,如果需要release版本,不打印调试信息,就把DEBUG设置为0,编译出来的程序就不会打印调试信息了。

示例代码清单

开发环境VS2013。当DEBUG设置为1,打印PR的信息;当DEBUG设置为0,不打印PR的信息。

 1 #include "stdafx.h"
 2 
 3 #define _DEBUG_ 1
 4 
 5 #if _DEBUG_
 6 #define PR(...) printf(__VA_ARGS__)
 7 #else
 8 #define PR(...)
 9 #endif
10 
11 int _tmain(int argc, _TCHAR* argv[])
12 {
13 
14     printf("debug test!\r\n");
15 
16     PR("hello world!\r\n");
17     PR("string:%s\r\n", "data");
18     PR("integer:%d\r\n", 100);
19 
20     return 0;
21 }

提醒

该技巧可以用在单片机C语言开发上,切换版本非常方便。 
keil环境下如何重定向printf到串口,可以参考这里

 

来源

以上是关于怎么用宏区分n64还是o32的主要内容,如果未能解决你的问题,请参考以下文章

变频电源怎么区分单相还是三相

如何通过nginx区分客户端访问来自电脑还是手机,怎么返回不同的页面(思路)?

如何区分一个功能是前端还是后台的问题?

logback日志maxHistory配置到底怎么区分月滚动还是日滚动,网上的好多例子说是月滚动,给的是日滚动例子

如何区分光盘是cd还是vcd???? 看光盘表面的啥东西能够区分的啊???

aspnet用户登录时怎么做区分是管理员还是普通用户?