u*********t 发帖数: 95 | 1 这个c程序在Ubuntu 9.04里编译能过,但是出来的结果很奇特
#include
#include
int main(){
int a;
bool b;
a = (b == true);
printf("a = %d\n",a);
return 0;
}
用Ubuntu 9.04 里的gcc 4.3.3 编译后,执行的结果竟然是 a = 184,
用FreeBSD里的gcc 4.2.1编译的结果就是对的,a要么是0,要么是1
用Debian4里的gcc 4.1.2和CentOS里的gcc 3.4.6也都是对的,莫非这是
gcc 4.3.3的新特性,强迫大家必须初始化变量? | a*****i 发帖数: 4391 | 2
http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
【在 u*********t 的大作中提到】 : 这个c程序在Ubuntu 9.04里编译能过,但是出来的结果很奇特 : #include : #include : int main(){ : int a; : bool b; : a = (b == true); : printf("a = %d\n",a); : return 0; : }
| c******n 发帖数: 4965 | 3 I think "true" value in C is never promised to be a specific one, it's just
non-zero.
【在 u*********t 的大作中提到】 : 这个c程序在Ubuntu 9.04里编译能过,但是出来的结果很奇特 : #include : #include : int main(){ : int a; : bool b; : a = (b == true); : printf("a = %d\n",a); : return 0; : }
| m*****n 发帖数: 266 | | u*********t 发帖数: 95 | 5 好吧,我把代码改了一下:
#include
#include
int main(){
int a;
int c;
bool b;
a = (b == true);
c = (b != true);
printf("a = %d, c = %d\n",a,c);
return 0;
}
结果a = 184, c = 185, 莫非 "true" = 184, "false" = 185, 或者反过来?
而不是用0表示 "false" ? | E*V 发帖数: 17544 | 6 这个是问题,gentoo下是对的。gcc。4。3。4
【在 u*********t 的大作中提到】 : 好吧,我把代码改了一下: : #include : #include : int main(){ : int a; : int c; : bool b; : a = (b == true); : c = (b != true); : printf("a = %d, c = %d\n",a,c);
| N****w 发帖数: 21578 | 7 生成汇编代码是什么样的看一眼就知道了
【在 u*********t 的大作中提到】 : 好吧,我把代码改了一下: : #include : #include : int main(){ : int a; : int c; : bool b; : a = (b == true); : c = (b != true); : printf("a = %d, c = %d\n",a,c);
| Z**0 发帖数: 1119 | 8 这个问题主要是因为b,没有初始化造成的,没有初始化就使用。我在一个机器上出现你说的结果,一个机器上出现“正确的”的结果。
【在 u*********t 的大作中提到】 : 好吧,我把代码改了一下: : #include : #include : int main(){ : int a; : int c; : bool b; : a = (b == true); : c = (b != true); : printf("a = %d, c = %d\n",a,c);
|
|