为了增强代码的可移植性小弟我做的蠢事

为了增强代码的可移植性我做的蠢事#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上改。