宏定义切换代码为unicode或者asciii

;宏定义切换代码为unicode或者asciii

;code

#ifdef _UNOCODE

#define zymain wmain

#define zyscpy  wcscpy

#define zyscat  wcscat

#define _T(x)  L##x

#define zyprintf wprintf

#define zychar unsigned short int

#else

#define zymain main

#define zyscpy strcpy

#define zyscat strcat

#define _T(x) x

#define zyprintf printf

#define zychar char

#endif

int zymain(){

//正常的unicode编码 用define实现

zychar szHello[]=_T("hello");

zychar szBuf[100];

zyscpy(szBuf,szHello);

zyscat(szBuf,_T(" world"));

#ifdef _DEBUG  //是否debug打印调试错误信息

zyprintf(_T("%s\n"),szBuf);

#endif

return 0;

}

时间: 2024-11-04 22:36:49

宏定义切换代码为unicode或者asciii的相关文章

s5pv210 sd卡宏定义C代码讲解

一.分析C代码:#define CopySDMMCtoMem(z,a,b,c,e)(((bool()(int, unsigned int, unsigned short, unsigned int, bool))(((unsigned int )0xD0037F98)))(z,a,b,c,e)) 看上去是一个很复杂的宏定义,现在让我们来解析下#define CopySDMMCtoMem (z,a,b,c,e)用CopySDMMCtoMem(z,a,b,c,e)来代替(((bool()(int,

iOS开发ARC与MRC下单例的完整写法与通用宏定义

#import "XMGTool.h" /** * 1:ARC下的完整的单例写法:alloc内部会调用+(instancetype)allocWithZone:(struct _NSZone *)zone方法,所以重写该方法,用GCD一次性函数,默认是线程安全的加了一把锁,也可以自己去加锁 @synchronized(self) { if (_instance == nil) { _instance = [super allocWithZone:zone]; } } 2:还要考虑cop

转载--c语言宏定义(1)

作者:独舞风 链接:c语言宏定义(1) 1.为什么要有宏定义? 代码中某个特定数值需要参与运算,而且该数值作用于多个地方,当需要对该数值进行修改时,希望只改动一个地方就能实现该数值的全部更新:即便某个数值只用到一次,当修改时也会面临搜索阅读大量代码.数值含义不明晰的问题:某些“操作块”封装成函数时,调用函数开销(保存上下文环境.参数调用.堆栈分配等)太大影响效率,不封装则需要多次输入相同的“操作块”内容,并且修改麻烦容易出现不一致的问题,这时就需要把“操作块”定义成宏,该方案本质是“空间换时间”

头文件的宏定义#ifndef测试

一.入题 在头文件的书写中,都加入了如下内容: #ifndef __头文件名_H #define __头文件名_H #endif 曾经在书中看到的解释是"防止重复定义",今天突然想到为什么是这样的解释. 二.测试 测试文件共三个,两个头文件:head1.h.head2.h,一个C源程序:program.c. 1.头文件没有宏定义的代码实验 ① 测试代码 head1.h unsigned char global[] = "hello world!"; head2.h

C++日记 宏定义函数

在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数.表达式.格式串等.在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”.宏定义是由源程序中的宏定义命令完成的.宏代换是由预处理程序自动完成的.若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述: 函数式宏定义:#define MAX(a,b) ((a)>(b)?(a):(b)) 普通函数     : MAX(

关于宏定义函数

宏定义函数:在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数.表达式.格式串等.在编译预处理时,对程序中所有出现的"宏名",都用宏定义中的字符串去代换,这称为"宏代换"或"宏展开".宏定义是由源程序中的宏定义命令完成的.宏代换是由预处理程序自动完成的.若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述: 函数式宏定义:#define MAX(a,b) ((

函数式宏定义和自定义函数的区别是什么?

自定义函数: 宏函数 (1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以危险性高:但因为省去了函数的调用,返回,释放,所以效率比自定义函数高: (2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同. 如果MAX是个普通函数,那么它的函数体return a > b ? a : b; 要编译生成指令,代码中出现的每次调用也要编译生成传参指令和call指令.而如果MAX是个函数式宏定义,这个宏定义本身倒不必编译生成指令,但是代码中出现的每次调用编译生

leveldb单元测试之宏定义源码剖析

前言 leveldb 是一个库,没有 main() 函数入口, 故非常难理清其中的代码逻辑.但好在库中有非常多的单元测试代码,帮助读者理解其中的各个模块的功能.然而,测试代码个人觉得一开始看时非常费解,特别是其中非常复杂的宏定义让人陷于云里雾里一般.研究 leveldb 的时间也有一段时间了,但一直都不想也不愿去弄懂.今天算是拿出破釜沉舟的勇气弄懂了这部分的原理,不能让谷歌大神辛苦写的测试代码没有发挥出它应有的价值.其实单元测试对于开发的作用非常重要的,这是毋庸置疑的.但我一直都没有去了解这部分

常用的编译宏定义:可以让代码在不同的编译情况下执行

(1)__OPTIMIZE__  :用于release和debug的判断,当选择了__OPTIMIZE__  时,可以让代码在release时执行,在debug时不执行.示例如下: 1 2 3 4 5 #ifndef __OPTIMIZE__       //这里执行的是debug模式下   else     //这里执行的是release模式下   #endif (2)__i386__ 与 __x86_64__   :用于模拟器环境和真机环境的判断.满足该条件的代码只在模拟器下执行.示例代码如