相关疑难解决方法(0)

为什么auto a = 1; 用C编译?

代码:

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语言中的代码实际上是否正确?

c auto c11

125
推荐指数
5
解决办法
4万
查看次数

x ^= x & -x; 其中 x 是一个无符号整数调用 UB?

由于-运算符应用于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唯一的解释是它被提升为更大的有符号整数大小,然后转换为无符号整数。

如果将其提升为更大的整数大小,如果没有更大的有符号整数类型会发生什么?

c language-lawyer

-4
推荐指数
1
解决办法
126
查看次数

标签 统计

c ×2

auto ×1

c11 ×1

language-lawyer ×1