我有一个编译成使用32位有符号整数的库。当其他应用程序使用标志例如:-DODBC64 进行编译时,它将我在库中使用的相同类型提升为64位有符号整数。
#ifdef ODBC64
typedef sint64 SLEN;
#else
#define SLEN int
#endif
当应用程序将引用传递给我的库时:
SLEN count;
mylibraryfunction(&count);
应用程序收到的值看起来像这样:
sizeof(SLEN) = 8
sizeof(SLEN) in my library = 4
m_AffectedRows BEFORE = 0x3030303030303030
m_AffectedRows AFTER = 0x3030303000000000 0
您可以看到,我的库中的赋值操作正在复制4个字节(值为0)。 我需要知道一种将上4个字节重置为0的方法。 例如:
0x0000000000000000
我尝试了静态转换和重新解释转换,但都没有帮助。
int
到一个函数中,该函数将其解释为32位的int
并相信它的声明。这样做是可行的,因为链接器无法识别相同名称符号的不同类型,并可能在没有任何警告的情况下进行链接,但这仍然是错误的。 - Scheff's Cat