İfadeleri "j = (ı | O); ve j = (ı & ı); lvalue bir hata olmalı?
Aşağıdaki benim kod bunu bekliyordum:
#include<stdio.h>
int main(){
int i = 10;
int j = 10;
j = (i | i);
printf("%d %d\n", j, i);
j = (i & i);
printf("%d %d\n", j, i);
return 1;
}
ifadeler j = (i | i);
j = (i & i);
aşağıda lvalue hataları üretir:
x.c: In function ‘main’:
x.c:6: error: lvalue required as increment operand
x.c:9: error: lvalue required as increment operand
Ama kod başarıyla derlenmiş, yukarıda o aşağıda ben de şaşırtıcı
~$ gcc x.c -Wall
~$ ./a.out
11 11
12 12
the above code working doğru kontrol edin.
Diğer operatörler hata anladığım kadarıyla () üretmek iken. Hatta bit XOR operatörü bir hata j = (i ^ i);
(derleme operators produce an lvalue error diğer kontrol) neden olur.
Sebebi nedir? Bu belirsiz ya da tanımsız olur ? ya bit YA VE operatörler farklı mı?
sürüm derleyici:
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
|
&
da değil. aksi halde herkes için çalışması gerekir
C99 modunda bu derleyici ile değil, onun bir hata: gcc x.c -Wall -std=c99
.
CEVAP
Derlemek değil, ve çoğu derleyici, derleme değil.
Sadece derleyici (i | i) == i
(i & i) == i
kimlikler bilir ve bu kimlikleri ifade, sadece değişken i
geride bırakarak optimize uzakta kullanıyor varsayımında olabilir.
Bu sadece bir tahmin, ama bana mantıklı bir sürü yapar.
VS hata ayıklama "hızlı izle"...
Ne zaman kullanarak &; geom_histogram&...
"sertifika süresi dolmuş hata Ayı...
İle " uğraşan;java.lang.OutOfMemor...
"Dalvik format Dönüştürme harici ...