读书人

几个编译警告的有关问题 如何修改能去

发布时间: 2012-05-15 14:35:29 作者: rapoo

几个编译警告的问题 怎么修改能去掉警告啊
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 第三个应该没什么问题吧,测试下
[解决办法]
除非你清楚一个警告的原因并且确定这个原因无关紧要,否则把所有警告当做错误看待

读书人网 >C++

热点推荐