MSVC 6.0 зажигает
#include <stdio.h>
main
{
int a=0;
float b=0;
a=(++a)+(++a)+(++a);
b=(++b)+(++b)+(++b);
printf ("%f\t%d\n",b,a);
return 0;
}
Прикольно.
9 ?
смотря какой компилятор
<..>\qweewr\qweewr.cpp(9) : error C2065: 'a' : undeclared identifier
<..>\qweewr\qweewr.cpp(9) : error C2100: illegal indirection
а так
int (*a;
все нормально.
у меня ДЕВЯТЬ!
6
a == 7
В шестой - там вообще разные значения для а и b получались...
libgcc2.c:731: error: insn does not satisfy its constraints:
(insn 1006 1005 1007 0xbf2b3604 (set (mem:QI (plus:HI (reg:HI 26 r26 [30])
(const_int 1 [0x1] [2 S1 A8])
(reg:QI 24 r24 [268] 9 {*movqi} (insn_list 1005 (insn_list 1434
(nil
(expr_list:REG_DEAD (reg:QI 24 r24 [268])
(nil
libgcc2.c:731: internal compiler error: in extract_constrain_insn_cached,
at recog.c:2090
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make[2]: *** [libgcc/./_udivmoddi4.o] Ошибка 1
make[2]: Выход из каталог `/home/shamardin/gcc/gcc-3.3.3/gcc'
make[1]: *** [stmp-multilib] Ошибка 2
make[1]: Выход из каталог `/home/shamardin/gcc/gcc-3.3.3/gcc'
make: *** [all-gcc] Ошибка 2
я закомментировал вещественную часть, посмотрел asm :
mov DWORD PTR _a$[ebp], 0
; Line 6
mov eax, DWORD PTR _a$[ebp] // a=0, eax=0
add eax, 1 // eax=1
mov DWORD PTR _a$[ebp], eax // a=1
mov ecx, DWORD PTR _a$[ebp] // ecx=1
add ecx, 1 // ecx=2
mov DWORD PTR _a$[ebp], ecx // a=2
mov edx, DWORD PTR _a$[ebp] // edx=2
add edx, 1 // edx=3
mov DWORD PTR _a$[ebp], edx // a=3
mov eax, DWORD PTR _a$[ebp] // eax=3
add eax, DWORD PTR _a$[ebp] // eax=3+3=6
add eax, DWORD PTR _a$[ebp] // eax=6+3=9
mov DWORD PTR _a$[ebp], eax // a=9
компилируй файл с расширением .c
the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified.
т.е. вычислять инкременты он может как ему вздумается и для разных типов в разном порядке и в разные моменты времени
<..>\qwrtt\qwrr.c(3) : error C2065: 'a' : undeclared identifier
<..>\qwrtt\qwrr.c(3) : error C2100: illegal indirection
<..>\qwrtt\qwrr.c(3) : error C2064: term does not evaluate to a function
в случае
int (*a;
опять все нормально.
Кстати, если не ошибаюсь, то в C по умолчанию void а не int.
и вообще-то странно.
нормальная это конструкция.
могу же я объявлять:
a,b,c;
и
f
{
blablabla
}
почему у тебя компилятор ошибку выдаёт - странно.
a=6
b=6
а ты его патчил?
Оставить комментарий
yolki
попробуйте скомпилировать:(Это "указатель на функцию, возвр. int")
У меня вылетает с ошибкой "Internal compiler error"
пофиксили в 7.0