Unt*_*led 12 c types platform-independent
我有这段代码,它挑战了我对C的所有知识.我在这里:
int main(void){
unsigned long long int massage ;
scanf("%llX", &massage); //input: 0x1234567890abcdef
printf("%llX", massage);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的"64位 - Corei5 - Fedora - GCC"上,它打印出了我喂它的确切内容.但在我的好友的系统(32位,MS XP,MinGW)上打印90ABCDEF.我不明白为什么.有人知道吗?
BTW:sizeof(unsigned long long int)他的系统是8.
rua*_*akh 10
问题是编译器认为(反映在sizeof:sizeof(unsigned long long int)在编译时进行评估)与运行时库相信的内容之间存在差异(如下所示printf:printf函数在运行时被调用,因此当其格式时 -说明符生效).
GCC不包含C运行时库.这是由平台提供的.GCC的MinGW端口使用Microsoft的原始(旧)Visual C运行时MSVCRT,它是Microsoft Visual Studio 6(1998年发布)的目标.
[...]
因为MinGW依赖于MSVCRT,所以它具有许多与Visual Studio 6兼容的限制和怪癖.您应该假设MinGW应用程序不能仅依赖于C99的C99行为.例如,不支持printf中较新的格式字符,如%a和%ll,尽管%ll存在一种解决方法.
(它提到的解决方法是使用I64而不是ll:所以,%I64X.令人讨厌的是,至少在我的系统上,GCC会在看到文字格式字符串时发出警告,因为它假设它会有更好的运行 -时间库.)
| 归档时间: |
|
| 查看次数: |
18391 次 |
| 最近记录: |