MSVC 6.0 зажигает

yolki

попробуйте скомпилировать:


(*a;


(Это "указатель на функцию, возвр. int")
У меня вылетает с ошибкой "Internal compiler error"
пофиксили в 7.0

pollak

Попробуй скомпилировать и запустить


#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;
}


yuda

Прикольно.

yolki

9 ?

pollak

смотря какой компилятор

yuda


<..>\qweewr\qweewr.cpp(9) : error C2065: 'a' : undeclared identifier
<..>\qweewr\qweewr.cpp(9) : error C2100: illegal indirection


а так
int (*a;
все нормально.

yolki

у меня ДЕВЯТЬ!

xz_post

6

yuda

b == 6.0
a == 7

pollak

В шестой визуалке?
В шестой - там вообще разные значения для а и b получались...

shlyumper

ладно вам, я недавно пытался собрать gcc 3.3.3 с опциями --target=avr --enable-languages="c" при помощи gcc 3.3.2. Вылетел выдав


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

yolki

В седьмой, Академическое издание. (лицензионное). две девятки
я закомментировал вещественную часть, посмотрел 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


yolki

компилируй файл с расширением .c

yolki

Вообще говоря,
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.

т.е. вычислять инкременты он может как ему вздумается и для разных типов в разном порядке и в разные моменты времени

yuda


<..>\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;
опять все нормально.

yuda

Кстати, если не ошибаюсь, то в C по умолчанию void а не int.

yolki

ошибаешься.
и вообще-то странно.
нормальная это конструкция.
могу же я объявлять:


a,b,c;


и


f
{
blablabla
}


почему у тебя компилятор ошибку выдаёт - странно.

maksimys19

intel compiler 5.0
a=6
b=6

yuda

> почему у тебя компилятор ошибку выдаёт
а ты его патчил?
Оставить комментарий
Имя или ник:
Комментарий: