|
фича компиляторв, инкремент переменной |
|
|
|
May 11 2007, 11:25
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
На форуме программистов (здесь http://www.rsdn.ru/Forum/?mid=2481623) с пацанами сейчас подняли интересную тему. Думаю, что си-шникам тоже следует остерегаться подобного кода. В двух словах проблема состоит в том, как компилятор должен понимать оператор инкремента.
int i; int x;
i = 5; x = ++i + ++i;
Чему в результате будет равно х ? Прикол в том, что MS VC++ 6.0 и VC++.NET дают результат, равный 14. Майкрософтовский C# и IAR говорят, что х = 13. А более всего удивил Watcom -- у него результат зависит от того, включена-ли оптимизация или нет... Я, конечно, понимаю, что код, который обсуждается, несколько далек от жизни, но все же, знать о таких прибабахах -- надо. Вечером дома, попробую еще в CodeVision эту фичу покрутить.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
 |
Ответов
|
May 11 2007, 11:29
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Тут все просто. По стандарту результат исполнения такого кода не определен. Тот, кто пишет такой код - сам себе злобный буратино.
|
|
|
|
|
May 11 2007, 15:37
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(vromanov @ May 11 2007, 15:29)  Тут все просто. По стандарту результат исполнения такого кода не определен. Тот, кто пишет такой код - сам себе злобный буратино. Угу Цитата Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be read only to determine the value to be stored.70) Цитата If a ‘‘shall’’ or ‘‘shall not’’ requirement that appears outside of a constraint is violated, the behavior is undefined. Цитата 1 undefined behavior behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements 2 NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message). В выражении ++i + ++i значение i изменяется два раза, следовательно, по стандарту результат неопределенный. В выражении ++i + i значение i считывается два раза, один раз для вычисления нового сохраняемого значения i слева, второй раз - при вычислении правой части сложения, следовательно, по стандарту результат неопределенный. Обратите внимание, что ключевой момент для применения правила об одном считывании - значение переменной i модифицируется в выражении.
--------------------
Пишите в личку.
|
|
|
|
|
May 11 2007, 17:48
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Oldring @ May 11 2007, 18:37)  В выражении ++i + i .... Таки да! Имеет место быть неопределенность исполнения side effect от оператора ++ по отношению к операции сложения. Взгляд замылил префиксный инкремент  , который на самом деле не имеет отношения к делу. Если вернуться к первоисточнику, то в этом конкретном случае ничего принципиально не разрешимого для компилятора нет, однако смягчения правил игры установленные стандартом в виде виде sequence point позволяют ему не разбираться с этими заморочками. Совершенно правильный подход к делу, поскольку заумные выражения усложняет жизнь компилятору и на самом деле ничего не дают програмисту. С другой стороны никто не может запретить разбирать и более сложные конструкции в этом случае он (Watcom, например) спокойно жует и такие перлы и выдает правильное значение 14. Те компиляторы, которые не разбирают - ругаются (IAR). Те компиляторы, которые не разбирают, молчат и выдают произвольное значение - бяки  . Цитата(vromanov @ May 11 2007, 19:08)  Удивительно, что столь очевидная вещь собрала столько сломанных копий. Где Вы копья увидели? А вещь не очевидная, если считать очевидным не использование такой дури в явном виде ни при каких условиях  .
Сообщение отредактировал zltigo - May 11 2007, 18:52
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 11 2007, 18:54
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Цитата(zltigo @ May 11 2007, 21:48)  Где Вы копья увидели? А вещь не очевидная, если считать очевидным не использование такой дури в явном виде ни при каких условиях  . По всем сообществам разбирают эту строчку. И куча народа дже после правильного ответа продолжают что-то придумывать, строить какие-то предположения.. Еще и колеги на работе по аське достали этим выражением.
|
|
|
|
|
May 11 2007, 20:02
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Цитата(zltigo @ May 11 2007, 23:03)  Никаких придумок - либо компилятор должен выдать 14, либо ссылаясь на биль о правах компиляторов отказаться отвечать на этот вопрос допущения стандарта послать такое выражения подальше. Компилятор ничего не должен.. В стандарте не написано, что он должен посылать такое выражение. Цитата(lebiga @ May 11 2007, 23:57)  //--------------------------------------
Когда-то полдня убил на глюк ИАРА. Код ниже работал в MCС18 (пик), а в ИАРЕ (4.30, ARM) нет. А вот это уже 100% глюк компилятора. Точнее оптимизатора.
|
|
|
|
|
May 11 2007, 20:19
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vromanov @ May 11 2007, 23:02)  Компилятор ничего не должен.. В стандарте не написано, что он должен посылать такое выражение. Нет, если он взялся разбирать это выражение, то он должен руководствуясь общими правилами выполнения операций и их приоритетов выдать такое значение. А вот отказаться имеет право и в случае отказа естествено не должен ничего и ни кому. Цитата(Oldring @ May 11 2007, 22:59)  IMHO правильное значение может быть 12, 13, но никак не 14.  Выполняется инкремент i, как самый приоритетный (левый или правый на Ваше усмотрение  ) Затем второй инкремент i, потом сложение, как самая неприоритетная операция. Выполнены все три операции в порядке приоритетов. Все.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 11 2007, 21:07
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(zltigo @ May 12 2007, 00:19)  Нет, если он взялся разбирать это выражение, то он должен руководствуясь общими правилами выполнения операций и их приоритетов выдать такое значение. А вот отказаться имеет право и в случае отказа естествено не должен ничего и ни кому. http://electronix.ru/forum/index.php?s=&am...st&p=249062Цитата Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message). Это цитата из стандарта. На русский переводить не нужно? Как видите, компилятор никому ничего не должен, все остальное - фантазии. Цитата(zltigo @ May 12 2007, 00:19)  Выполняется инкремент i, как самый приоритетный (левый или правый на Ваше усмотрение  ) Затем второй инкремент i, потом сложение, как самая неприоритетная операция. Выполнены все три операции в порядке приоритетов. Все. Да, именно так. Пусть аргументы '+' вычисляются справа налево  Сначала считывается значение правого i (5) прибавляем 1, записываем значение правого i. Запоминаем результат правого подвыражения (6). Затем считываем значение левого i (6), прибавляем 1, сохраняем новое значение i, запоминаем результат левого подвыражения (7). Теперь к результату правого подвыражения (6) прибавляем результат левого подвыражения (7) и в результате получаем 13. Альтернатива - когда результаты преинкремента прописываются в переменные в конце вычисления выражения (имеют право - точка сохранения результатов однозначно не определена). В этом случае результат двух подвыражений будет 6, и их сумма будет 12. А вот как получить 14 - не понимаю
--------------------
Пишите в личку.
|
|
|
|
|
May 11 2007, 21:57
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Oldring @ May 12 2007, 00:07)  Это цитата из стандарта. На русский переводить не нужно? Как видите, компилятор никому ничего не должен, все остальное - фантазии. Переводить не нужно. Может вам мой предыдущий пост на английский перевести? Или постараетесь мой русский язык понять? Повторять не вижу смысла. Цитата Запоминаем результат правого подвыражения (6) Вот 'запоминаем' это и есть чистейшей воды фантазии. С какого бодуна компилятор будет заводить промежуточную переменную-дубль для запоминания? Только если у него совсем крышу снесло. Цитата Альтернатива - когда результаты преинкремента прописываются в переменные в конце вычисления выражения (имеют право - точка сохранения результатов однозначно не определена). В этом случае результат двух подвыражений будет 6, и их сумма будет 12. Это или инкремент суммирование инкремент суммы с тем-же результатом - имеет право, только если это он сделает без warnig я не пойму такой поступок. Цитата А вот как получить 14 - не понимаю  Тогда перечитайте, вдруг поймете. Если не поймете - можете поискать компилятор, который без warning выдаст результат отличный от 14. Может удастся принять, как даденность  . Вдруг найдете - сообщите, что-бы вдруг я случайно не стал пользовать небрежно писанный компилятор.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 12 2007, 07:23
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(zltigo @ May 12 2007, 01:57)  Переводить не нужно. Может вам мой предыдущий пост на английский перевести? Или постараетесь мой русский язык понять? Повторять не вижу смысла. А что - переведите, будет любопытно.  Вот только это все равно будет Ваше личное мнение, пусть и на английском языке, в отличие от процитированных мною требований стандарта. Цитата(zltigo @ May 12 2007, 01:57)  Вот 'запоминаем' это и есть чистейшей воды фантазии. С какого бодуна компилятор будет заводить промежуточную переменную-дубль для запоминания? Только если у него совсем крышу снесло. По правилам формальной семантики выражений языка С (так как мы говорим о "правильности" выражений - мы на время забываем, что такое выражение в целом - undefined bihavior). '+' суммирует результаты своих левого и правого подвыражений. С какого бодуна результат первого подвыражения изменяется после его вычисления? Цитата(zltigo @ May 12 2007, 01:57)  Тогда перечитайте, вдруг поймете. Если не поймете - можете поискать компилятор, который без warning выдаст результат отличный от 14. Может удастся принять, как даденность  . Вдруг найдете - сообщите, что-бы вдруг я случайно не стал пользовать небрежно писанный компилятор. Я-то как раз понимаю, как компилятор получает такой результат. У многих компиляторов один из промежуточных этапов компиляции - получение трехадресного кода. При этом разработчики компиляторов, помня правило, процитированное мною первым в первом моем посте, полагаются на то, что переменная i второй раз в одном и том же выражении не изменится, и в ней можно сохранить промежуточный результат подвыражения вместо заведения еще одной промежуточной переменной. Такое предположение компилятора в данном случае является ошибочным. То есть такое поведение - побочный эффект, допускаемый стандартом как undefined bihavior, но никак не "правильное" поведение компилятора.  P.S. Что касается "небрежно написанных компиляторов" - есть такая русская пословица, про зеркало. Компилятор может выдавать что угодно в подобных выражениях. Делать или нет специальный анализ выражения для генерации предупреждений в таких случаях - это выбор разработчиков компиляторов, тем более, что во многих случаях (с указателями) компилятор просто не может знать, что два подвыражения модифицируют один объект. Поэтому лучше так не пишите, а если пишите - то ничего не требуйте от компилятора. Язык С, действительно, налагает довольно высокие требования на квалификацию программиста в части неиспользования некоторых конструкций.
--------------------
Пишите в личку.
|
|
|
|
|
May 12 2007, 08:31
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Oldring @ May 12 2007, 10:23)  Я-то как раз понимаю, как компилятор получает такой результат.... Я тоже. Только это внутреннее дело компилятора, как он обрабатывает неправильные с точки зрения стандарта (определяющего минимальные требования к компилятору) конструкции. То, что k=++i + ++i; компилятор имеет право не заморачиваясь на специальные анализы тупо на автомате разбирать и получать непредсказуемый результат это понятно. И никто никогда против этого не возражал. То, что разработчики компиляторов имеют право не прикрываясь минимальными требования стандарта разбирать более сложные выражения, надеюсь не вызывает Вашего категорического непрятия? Впрочем, если и вызывает, то пожалуй с этим разработчики компиляторов могут не согласиться  . Выражение k=++i + ++i; являсь совершенно диким, тем не менее поддается однозначной разборке согласно основополагающим правилам операций и их приоритетов. Про трудности компиляции такого и _правильное_ решение стандарта разрешить не заморачиваться с такой разборкой все ясно. Цитата Что касается "небрежно написанных компиляторов" - есть такая русская пословица, про зеркало. Это не ко мне. Я не писал, не пишу и не буду писать подобных выражений, но тем не менее, если вдруг комилятор позволит себе не выдав предупреждение в таком выражении выдать значение отличное от 14, то это меня насторожит и приведет к некоторому недоверию к такому компилятору, поскольку он чего-то не поняв позволил себе меня не предупредить. Цитата Делать или нет специальный анализ выражения для генерации предупреждений в таких случаях - это выбор разработчиков компиляторов Это их право. Только у меня тоже есть право  не использовать такие компиляторы  . Поскольку сегодня выходной день, то я провел маленький тест используемых мною в повседневной жизни компиляторов. OpenWatcom, GCC, Borland не возразили и выдали правильный результат. IAR, VisualDSP - выдали предупреждение. Все это с учетом того, что warnigs я всегда по максимуму активизирую и без оптимизации компиляцию не пользую. Результат меня полностью удовлетворил - по поводу разборки этой дури у меня претензий к используемым мною компиляторам нет и с их разработчиками у меня коннсенсус  . Цитата Поэтому лучше так не пишите, а если пишете - то ничего не требуйте от компилятора. К чему это адресное обращение? Я призывал так писать??? P.S. Пожалуй по четвертому кругу я больше не пойду изъясняться по проблемам k=++i + ++i;
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 12 2007, 08:45
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(zltigo @ May 12 2007, 12:31)  Выражение k=++i + ++i; являсь совершенно диким, тем не менее поддается однозначной разборке согласно основополагающим правилам операций и их приоритетов. Про трудности компиляции такого и _правильное_ решение стандарта разрешить не заморачиваться с такой разборкой все ясно. Ну так приведите свой правильный разбор. Я свой привел, приводящий к 12 или 13. Я утверждаю, что 14 - это неправильный результат исходя из семантики операций. Цитата(zltigo @ May 12 2007, 12:31)  К чему это адресное обращение? Я призывал так писать??? В ответ на Ваше утверждение, что для Вас имеет принципиальное значение, какой результат выдается для этого выражения. Если я Вас неправильно понял - тогда извините.
--------------------
Пишите в личку.
|
|
|
|
|
May 12 2007, 09:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Oldring @ May 12 2007, 11:45)  Ну так приведите свой правильный разбор. Я приводил. Цитата Я свой привел, приводящий к 12 или 13. Приводили, но не с точки зрения базовых правил а с точки зрения как может быть построена разборка выражения в потрохах компилятора. Что позволяет объяснить, почему появляется неправильный результат и почему стандарт не требует разбирать такую ерунду. Но все это не имеет отношения к пользователю компилятора написавшего дурацкое, сложно разбираемое компилятором (если он за это возьмется!), хреново оптимизируемое и трудно понимаемое человеком, но вполне однозначо трактуемое выражение - "берем одну едиственную переменную, инкрементируем один раз, инкрементируем второй раз, прибавляем к ней ее-же значение. Цитата В ответ на Ваше утверждение, что для Вас имеет принципиальное значение, какой результат выдается для этого выражения. Если я Вас неправильно понял - тогда извините. Про "принципиальное значение" я ни сном ни духом не поминал. Повторяю - выдаваемый результат лично для меня имеет некоторое (а отнюдь не принципиальное) значение только в плане оценки компилятора и только в том единственном случае, когда он не выдав предупреждения выдал результат отличный от 14. В проведенных тестах я даже не смотрел на результат у компиляторов которые выдали warning-и. Во настолько он для меня имеет "принципиальное значение"  Извиняю.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
zhevak фича компиляторв May 11 2007, 11:25     Oldring Цитата(zltigo @ May 11 2007, 23:03) Никак... May 11 2007, 19:59      PrSt Цитата(Oldring @ May 11 2007, 22:59) Поче... May 13 2007, 14:08       lebiga Пора рассматривать известную шутку Ричи и Керниган... May 13 2007, 16:03       zhevak Цитата...
разбиваем как это делает компилятор
temp... May 14 2007, 00:04        Oldring Цитата(zhevak @ May 14 2007, 04:04) Отсюд... May 14 2007, 03:31               Oldring Цитата(zltigo @ May 12 2007, 13:36) Жаль.... May 12 2007, 09:56 Ivan_Kov Проблема стара как "С"...
Скобки использ... May 11 2007, 11:33 zltigo Цитата(Ivan_Kov @ May 11 2007, 14:33) Про... May 11 2007, 18:04 amw GCC 3.4.5
gcc -o x x.c
x = 14
gcc -Os -o x x.c
x =... May 11 2007, 11:33 zltigo Цитата(zhevak @ May 11 2007, 14:25) как к... May 11 2007, 11:57 vromanov не страдайте фигней.
Вот вам выдержка из стандарта... May 11 2007, 12:39 zltigo Цитата(vromanov @ May 11 2007, 15:39) не ... May 11 2007, 12:42 vromanov Как любителю стандартов, вам надо было не искать о... May 11 2007, 12:51 zltigo Цитата(vromanov @ May 11 2007, 15:51) Тут... May 11 2007, 13:13 dxp Цитата(vromanov @ May 11 2007, 19:51) Как... May 11 2007, 13:37  Сергей Борщ Цитата(dxp @ May 11 2007, 16:37) Очевидно... May 11 2007, 14:22   zltigo Цитата(Сергей Борщ @ May 11 2007, 17:22) ... May 11 2007, 14:29 Ivan_Kov Я вот смотрю, и не могу никак понять, что за нужда... May 11 2007, 15:32 vromanov Удивительно, что столь очевидная вещь собрала сто... May 11 2007, 16:08 lebiga Цитата(vromanov @ May 11 2007, 20:08) Уди... May 11 2007, 19:57 defunct Цитатаx = ++i + ++i;
Это в китайских исходниках... May 11 2007, 17:54 vetal По моему все очень просто, т.к. код архитектурно з... May 12 2007, 10:16 Oldring Цитата(vetal @ May 12 2007, 14:16) 3. x=i... May 12 2007, 10:21 vetal ЦитатаТак вот откуда взялась эта третья операция -... May 12 2007, 10:42 Oldring Цитата(vetal @ May 12 2007, 14:42) В дере... May 12 2007, 10:52 zltigo Цитата(vetal @ May 12 2007, 13:42) Это вп... May 12 2007, 11:48 vetal Потому и "undefined bihavior", что по мо... May 12 2007, 11:11 Oldring Цитата(vetal @ May 12 2007, 15:11) Потому... May 12 2007, 12:23  zltigo Цитата(Oldring @ May 12 2007, 15:23) arm-... May 12 2007, 13:05   Oldring Цитата(zltigo @ May 12 2007, 17:05) Молча... May 12 2007, 13:14    zltigo Цитата(Oldring @ May 12 2007, 16:14) В пр... May 12 2007, 14:14     Oldring Цитата(zltigo @ May 12 2007, 18:14) Но пр... May 12 2007, 14:38      zltigo Цитата(Oldring @ May 12 2007, 17:38) В лю... May 12 2007, 14:51       Oldring Цитата(zltigo @ May 12 2007, 18:51) Ну ск... May 12 2007, 15:14        zltigo Цитата(Oldring @ May 12 2007, 18:14) Как ... May 12 2007, 15:42         Oldring Цитата(zltigo @ May 12 2007, 19:42) И при... May 12 2007, 16:06          zltigo Цитата(Oldring @ May 12 2007, 19:06) Стан... May 12 2007, 16:29           Oldring Цитата(zltigo @ May 12 2007, 20:29) Закон... May 12 2007, 16:57            zltigo Цитата(Oldring @ May 12 2007, 19:57) arm-... May 12 2007, 17:55             Oldring Цитата(zltigo @ May 12 2007, 21:55) Меня ... May 13 2007, 08:35              zltigo Цитата(Oldring @ May 13 2007, 11:35) А с ... May 13 2007, 06:24               Oldring Цитата(zltigo @ May 13 2007, 10:24) Посем... May 13 2007, 06:43                zltigo Цитата(Oldring @ May 13 2007, 09:43) А во... May 13 2007, 07:24                 Oldring Цитата(zltigo @ May 13 2007, 11:24) Никак... May 13 2007, 08:02                  zltigo Цитата(Oldring @ May 13 2007, 11:02) Один... May 13 2007, 08:11                   Oldring Цитата(zltigo @ May 13 2007, 12:11) Не дв... May 13 2007, 08:19                    zltigo Цитата(Oldring @ May 13 2007, 11:19) Проб... May 13 2007, 09:15                     Oldring Цитата(zltigo @ May 13 2007, 13:15) Может... May 13 2007, 09:27                      zltigo Цитата(Oldring @ May 13 2007, 12:27) Не с... May 13 2007, 09:38                       Oldring Цитата(zltigo @ May 13 2007, 13:38) Может... May 13 2007, 09:55                        zltigo Цитата(Oldring @ May 13 2007, 12:55) В ст... May 13 2007, 10:12                         Oldring Цитата(zltigo @ May 13 2007, 14:12) Отлич... May 13 2007, 10:26                          zltigo Цитата(Oldring @ May 13 2007, 13:26) Пров... May 13 2007, 10:37                           Oldring Цитата(zltigo @ May 13 2007, 14:37) Aвтор... May 13 2007, 11:03                           vromanov Цитата(zltigo @ May 13 2007, 14:37) Ну ка... May 13 2007, 12:03                            zltigo Цитата(vromanov @ May 13 2007, 15:03) Воо... May 13 2007, 13:15 Niko1a$ Посмотрите полученный ассемблерный код на своей ма... May 12 2007, 12:42 Oldring Цитата(Niko1a$ @ May 12 2007, 16:42)... May 12 2007, 12:46 vetal nios2-elf-gcc выдает без оптимизации 13, с оптимиз... May 12 2007, 13:09 vetal ЦитатаВ обоих случаях оптимизации говорит нельзя?
... May 12 2007, 14:57 singlskv Я Вам не помешаю ?
Выскажу свое ИМХО:
- Компилято... May 12 2007, 22:53 zltigo Цитата(singlskv @ May 13 2007, 01:53) - р... May 13 2007, 06:48 cebotor Цитата(singlskv @ May 13 2007, 02:53) Я В... May 15 2007, 06:19  Oldring Цитата(cebotor @ May 15 2007, 10:19) все ... May 15 2007, 06:26 scifi Ну вы даёте... Эту бы энергию - да в мирных целях ... May 13 2007, 06:20 vromanov А то, что значение переменной может поменяться в ... May 14 2007, 00:07 zhevak Цитата(vromanov @ May 14 2007, 06:07) А т... May 14 2007, 00:19  vromanov Цитата(zhevak @ May 14 2007, 04:19) не-е,... May 14 2007, 00:22 amw В пост #4 при компилляции добавляем -Wall и получа... May 14 2007, 07:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|