1

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

#include "stdio.h"

int main() {
        long x = 1000000000000;
        int y = x;
        printf("%ld %d\n", x, y);
        return 0;
}

输出是人们所期望的:

1000000000000 -727379968

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

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

1 回答 1

8

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

于 2013-08-30T16:41:50.883 回答