以下行(纯c)在
Windows(win7 64位代码块13 mingw32)和debian(wheezy 32位代码块10 gcc)上干净地编译,但会引发对kali(64位代码块gcc)的警告.任何意见?我的意思是,为什么我得到这个警告,虽然同一行编译w / o任何警告在Windows& debian的?
void* foo(void *dst,...) { // some code unsigned int blkLen = sizeof(int); // this line ok. unsigned int offset = (unsigned int) dst % blkLen; // warning here! // some code cont... }
代码块中的消息是:“error:从指针转换为不同大小的整数[-Werror = pointer-to-int-cast]”
注意:我的编译器选项是-std = c99 -Werror -save-temps(在所有三个系统上相同).
编辑2:
虽然我已经设法使用下面的预处理器行编译w / o警告,
@Keith Thompson(见下文)对这个问题至关重要.所以,我最后的决定是使用uintptr_t将是一个更好的选择.
编辑1:
感谢大家回复.正如所有的回复记录,问题是32位与64位的问题.我插入以下预处理行:
#if __linux__ // or #if __GNUC__ #if __x86_64__ || __ppc64__ #define ENVIRONMENT64 #else #define ENVIRONMENT32 #endif #else #if _WIN32 #define ENVIRONMENT32 #else #define ENVIRONMENT64 #endif #endif // __linux__ #ifdef ENVIRONMENT64 #define MAX_BLOCK_SIZE unsigned long long int #else #define MAX_BLOCK_SIZE unsigned long int #endif // ENVIRONMENT64
然后将问题行替换为:
unsigned int offset = (MAX_BLOCK_SIZE) dst % blkLen;
现在,一切似乎都可以.
解决方法
原文地址:https://www.jb51.cc/c/114365.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。