当我在一个简单的“hello world”类型程序中调用我的OSX10_8机器上的sizeof(wchar_t)
时,我得到了4个字节,正如我对使用UTF-32的机器所期望的那样。但是,当我从测试程序中调用它时,我正在使用验证我编写的应用程序的行为,我得到了1个字节。
我在测试程序和hello world程序之间看到的唯一区别是测试程序使用typedef
:
#ifdef _WCHAR_T_DEFINED
typedef wchar_t SQLWCHAR;
#else
typedef unsigned short SQLWCHAR;
#endif
当我在测试程序中调用sizeof()
时
VerifyAndThrow(
(int) sizeof(SQLWCHAR),
(int) bufferLength,
SBT_L( "The last call to SqlGetData should return 5 characters" ),
SBODBC_FILELINE );
传递给VerifyAndThrow()
的第一个参数是1。
有人可以解释这种差异的原因吗?它与typedef
有关吗?我不认为这是因为wchat_t
没有定义。如果是这种情况,我希望sizeof()
返回unsigned short
的大小,这在UTF-32机器上是两个字节。