为了增强代码的可移植性我做的蠢事#ifdef UNICODEchar ANSIfilePath[100]{0}WideCharToMultiByte (CP_AC
为了增强代码的可移植性我做的蠢事
#ifdef UNICODE
char ANSIfilePath[100]={0};
WideCharToMultiByte (CP_ACP, // ANSI 代码页
WC_COMPOSITECHECK, // 检查重音字符
filePath.GetBuffer(), // 原Unicode 串
-1, // -1 意思是串以0x00结尾
ANSIfilePath, // 目的char字符串
sizeof(ANSIfilePath), // 缓冲大小
NULL, // 非缺省字符串
NULL ); // 忽略这个参数
if(GetDllAPIinfo(ANSIfilePath,DLL)==OK)
{
#else
if(GetDllAPIinfo(filePath.GetBuffer(),DLL==OK)
{
#endif
#ifdef UNICODE
wchar_t* wBuffer=new wchar_t[DLL.APIList.size()+1];
MultiByteToWideChar(CP_ACP,
MB_COMPOSITE,
DLL.APIList.c_str(),
-1,
wBuffer,
NULL);
GetDlgItem(IDC_DLLINFO)->SetWindowText(wBuffer);
#else
GetDlgItem(IDC_DLLINFO)->SetWindowText(DLL.APIList.c_str());
#endif
this->SetWindowText(CHARSET("动态链接库浏览器(")+filePath+CHARSET(")"));
}
filePath.ReleaseBuffer();
delete fileDialog;
}
本来是在使用ANSI字符集的情况下可以运行的代码,由于某些原因需要改用UNICODE,结果我采用了宏。本以为这样能给自己以后修改代码带来方便:只要修改个别宏定义就行了,可各种各样的问题接踵而来。最终我不得不承认,在实现中随意使用宏就他妈的是一种愚蠢行为!好端端的几句话被戳成这幅丑样! 宏定义? 编码规范 敏捷开发
[解决办法]
宁愿去写个重载,也不会动原来能正常运行的代码
代码只要不出错,不重构,永远只做加法
[解决办法]
库有这样的特性,如果你没有引用:
引用:宁愿去写个重载,也不会动原来能正常运行的代码
代码只要不出错,不重构,永远只做加法
请问现在的编译器是否有能力识别那些代码段是没有被引用的,然后在编译时忽略这些代码。比如一个函数我实现了,但是没有任何模块调用它,编译器有能力将它排除并不编译到可执行文件中吗?
[解决办法]
可公用的代码不多,搞这么复杂干什么啊
#ifdef UNICODE
{
....
}
#else
{
...
}
#endif
filePath.ReleaseBuffer();
delete fileDialog;
这样不就清晰多了?
[解决办法]
正确用法:
1. C语言
DoA(char* p)
{
//ansi version
}
DoW(wchar_t* p)
{
//wide char version
}
#ifdef UNICODE
#define Do DoW
#else
#define Do DoA
#endif
TCHAR* someString = ...;
Do(someString);
2. C++
因为我可以重载函数,代码更简单了些
[解决办法]
支持4楼
只是ANSI和UNICODE的差别,就为UNICODE重写,别在ANSI上改。
