我使用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)
答案 0 :(得分:7)
我相信您正在寻找未包含在-Wconversion
中的-Wall
。我肯定在g ++ 4.4和4.5中得到了警告,但我没有权限测试早期版本。 warning: conversion to 'int' from 'long long int' may alter its value
(我使用long long
,因为我生成了32位构建,其中long仍为32位)。