G++允许在x64上进行隐式长整型截断

G++ allows for implicit long-to-int truncation on x64

本文关键字:长整型 x64 G++      更新时间:2023-10-16

我用g++-Wall编译了这段代码,没有得到警告/错误:

#include "stdio.h"
int main() {
        long x = 1000000000000;
        int y = x;
        printf("%ld %dn", x, y);
        return 0;
}

输出是人们所期望的:

1000000000000 -727379968

但是在这种情况下,编译器不应该防止隐式转换/截断吗?

g++ (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)

我相信您正在寻找未包含在-Wall中的-Wconversion。我肯定在g++4.4和4.5中得到了警告,但我无法测试早期版本。warning: conversion to 'int' from 'long long int' may alter its value(我使用long long是因为我生成了一个32位的构建,其中long仍然是32位)。