小弟求助关于 c语言 assert 宏的问题
void TextMessageBox(LPCTSTR lpText)
{
assert(lpText != NULL);
MessageBox(NULL, lpText, NULL, MB_OK);
}
将级别跳到最高,提示错误warning C4365: “参数”: 从“long”转换到“unsigned int”,有符号/无符号不匹配
错误指到了assert(lpText != NULL);这一行
求解释 c C++ assert
[解决办法]
莫非是 lpText == NULL ,所以造成assert出错?
warning一般都没关系不用管的呀
[解决办法]
没看懂题目。
字面理解,不就是指针指空了么
[解决办法]
警告里面已经说了是“long”“unsigned int”不配配
看一下assert的声明
建议最好使用英文开发环境,呵呵呵
[解决办法]
lpText != NULL这两个类型不匹配,不能比较
[解决办法]
是人写的就有bug,这里谈不上bug,就是有点小瑕疵。
[解决办法]
显示类型转换
assert(lpText != (LPCTSTR)NULL);
[解决办法]
偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。
[解决办法]
assert((void*)lpText != (void*)NULL);
如果还有问题,就是assert定义里面的问题了。
[解决办法]
#define assert(_Expression) (void)( (!!(_Expression))
[解决办法]
(_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
根据你给的定义
assert(1)
展开成
(void)( (!!(1))
[解决办法]
(_wassert(_CRT_WIDE("1"), _CRT_WIDE("tmp"), 2), 0) )
还能看到_CRT_WIDE和_wassert的定义么?
或者LZ自行预编译,看assert(1)展开成什么?
[解决办法]
好样的,对warning都不放过。