C 警告(clang 编译器)“整数文字太大而无法用有符号整数表示”

yon*_*tix 2 c clang

我有这段代码

#include <stdio.h>

typedef signed long long v2signed_long 
      __attribute__ ((__vector_size__ (sizeof(signed long long) * 2)));

int main()
{
        v2signed_long v = {4611686018427387904LL, -9223372036854775808LL};

        printf("%lli, %lli\n", v[0], v[1]);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下警告(相关问题没有帮助):

:7:45: warning: integer literal is too large to be represented in
       a signed integer type, interpreting as unsigned
  [-Wimplicitly-unsigned-literal]
    v2signed_long v = {4611686018427387904LL, -9223372036854775808LL};
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个警告?谢谢!

dbu*_*ush 11

问题是它-9223372036854775808LL实际上不是整数文字。它是应用9223372036854775808LL了一元运算-符的文字。该值9223372036854775808太大而无法放入 asigned long long这就是您收到警告的原因。

您可以改用表达式-9223372036854775807LL - 1LL来解决此问题。该值9223372036854775807适合 a signed long longas does -9223372036854775807LL,然后减去 1 为您提供所需的值。

或者,您可以使用宏LLONG_MIN.