我已经定义了一个自定义断言宏.这适用于所有其他比较.但是,我得到编译器错误:
ISO C++ forbids comparison between pointer and integer
Run Code Online (Sandbox Code Playgroud)
当使用下面显示的宏(DWASSERT)来比较指针时,如下面的代码所示.
#define DWASSERT(condition,printstatement) if(!condition){ printf(printstatement); assert(condition); }
#include <stdio.h>
int main()
{
int target = 0;
int* ptr1 = ⌖
int* ptr2 = ⌖
//Normal comparison works fine
if(ptr1 == ptr2)
printf("Equal");
//Comparison using Macro generates compiler
//error on the next line
DWASSERT(ptr1 == ptr2, "Pointers not equal!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以简单地避免在这种情况下使用DWASSERT,但我很好奇为什么会生成此编译器错误.
问题是DWASSERT(ptr1 == ptr2, ...扩展到了
if(!ptr1 == ptr2){ printf(...
你看到发生了什么事吗?!ptr1 == ptr2相当于(!ptr1) == (ptr2),并且因为!ptr1是一个整数类型并且ptr2是一个指针类型,你得到你的错误.
要解决此问题,您需要将宏定义更改为:
#define DWASSERT(condition,printstatement) if(!(condition)){ printf...
Run Code Online (Sandbox Code Playgroud)
另外,请记住,以任意字符串作为格式使用您的方式是一个坏主意printf.在某些时候,有人会给你一个字符串,其中的%东西会破碎.你应该使用像puts(x)或printf("%s", x).
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |