代码:
int main(void)
{
auto a=1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当文件具有.c扩展名时,MS Visual Studio 2012编译器会编译无错误.我一直认为,当你使用.c扩展名时,编译应该是根据C语法,而不是C++.而且,据我所知,自C++ 11以来只允许在C++中使用auto类型,这意味着该类型是从初始化程序推导出来的.
这是否意味着我的编译器不坚持C,或者C语言中的代码实际上是否正确?
由于-运算符应用于xwhich is,此函数是否会调用未定义的行为unsigned?我搜索了标准,找不到解释。
unsigned foo(unsigned x)
{
return x ^= x & -x;
}
Run Code Online (Sandbox Code Playgroud)
海事组织是的。
编辑void func(unsigned x)
{
printf("%x", -x);
}
int main(void)
{
func(INT_MIN);
}
Run Code Online (Sandbox Code Playgroud)
IMO唯一的解释是它被提升为更大的有符号整数大小,然后转换为无符号整数。
如果将其提升为更大的整数大小,如果没有更大的有符号整数类型会发生什么?