几个编译警告的有关问题 如何修改能去掉警告
几个编译警告的问题怎么修改能去掉警告啊1.LPCTSTR CRegEx::GetValueSZ(LPCTSTR szName){TCHAR tchPath[MA
几个编译警告的问题 怎么修改能去掉警告啊
1.
LPCTSTR CRegEx::GetValueSZ(LPCTSTR szName)
{
TCHAR tchPath[MAX_PATH];
GetValueSZ(szName,tchPath,MAX_PATH);
return tchPath;
}
编译后警告:warning C4172: returning address of local variable or temporary
2.
char cTemp = '-1';
编译后警告:
warning C4309: 'initializing' : truncation of constant value
3.
头文件 atlosapice.h 和 Pwinuser.h 中 WM_NCDESTROY 重定义了
warning C4005: 'WM_NCDESTROY' : macro redefinition Pwinuser.h
我查了 一下,工程中没有添加“atlosapice.h”头文件,不晓得是不是哪个头文件中包含了它,
关于WM_NCDESTROY的定义:
“atlosapice.h”文件中是这样:
C/C++ code#ifndef WM_NCDESTROY#define WM_NCDESTROY (WM_APP - 1)#endif
“Pwinuser.h”件中是这样:
C/C++ code#define WM_NCDESTROY 0x0082
这个怎么解决呀?
[解决办法]TCHAR tchPath[MAX_PATH];为函数的局部变量,那么函数结束后该变量就失去了意义。外部的就不可以再用这变量了。如果真的需要返回函数内部的东西,请定义指针p = (char*)malloc(size)
2 char cTemp = '-1'; 你说一个字符能表示多少东西?'-1'我也不清楚需要多少个,但是一个字符肯定放不下。
3 在Pwinuser.h里同样的使用
#ifndef WM_NCDESTROY
#define WM_NCDESTROY ox0082
#endif
[解决办法]1 这个警告可不是闹着玩的,改成如下即可
std::string CRegEx::GetValueSZ(LPCTSTR szName)
{
TCHAR tchPath[MAX_PATH];
GetValueSZ(szName,tchPath,MAX_PATH);
return std::string(tchPath);
}
2 #pragma warning(disable : C4309)
3 第三个应该没什么问题吧,测试下
[解决办法]除非你清楚一个警告的原因并且确定这个原因无关紧要,否则把所有警告当做错误看待