axalay 0 16 октября, 2008 Опубликовано 16 октября, 2008 · Жалоба Две аналогичные записи: 1: pAlarmLoop->WriteIndex=(pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1))?(pAlarmLoop-WriteIndex++):0; 2: if (pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1)) pAlarmLoop->WriteIndex++; else pAlarmLoop->WriteIndex=0; В едк первая не работает. Хотя эти две записи аналогичны Проверил в вижал студио-работают обе. Что за х? Извините-случайно знак ">" стерся 1: pAlarmLoop->WriteIndex=(pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1))?(pAlarmLoop->WriteIndex++):0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 1 16 октября, 2008 Опубликовано 16 октября, 2008 · Жалоба GCC не знаю, но а если так написать: pAlarmLoop->WriteIndex=(pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1))?(pAlarmLoop->WriteIndex+1):0; По вопросу - может эта ситуация в стандарте на C не оговорена и компиляторы на своё усмотрение интерпретируют запись? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axalay 0 16 октября, 2008 Опубликовано 16 октября, 2008 · Жалоба GCC не знаю, но а если так написать: pAlarmLoop->WriteIndex=(pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1))?(pAlarmLoop->WriteIndex+1):0; По вопросу - может эта ситуация в стандарте на C не оговорена и компиляторы на своё усмотрение интерпретируют запись? :) Во я дурак-это же постфиксная запись! Сначала присваивается-а потом только меняется значение вроде. Ша попробую Разумеется дело было не в жсс, а в прокладке между стулом и клавиатурой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 16 октября, 2008 Опубликовано 16 октября, 2008 · Жалоба Две аналогичные записи: Это НЕ аналогичные записи. Стандарт ISO/IEC 14882:1998, раздел 5, пункт 4: ...order of evaluation of operands of individual operators and subexpressions individual expressions, and the order in which side effects take place, is unspecified... Другими словами, порядок вычисления pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1) и pAlarmLoop->WriteIndex++ зависит от компилятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axalay 0 16 октября, 2008 Опубликовано 16 октября, 2008 · Жалоба Это НЕ аналогичные записи. Стандарт ISO/IEC 14882:1998, раздел 5, пункт 4: Другими словами, порядок вычисления pAlarmLoop->WriteIndex<(ALARM_BUF_SIZE-1) и pAlarmLoop->WriteIndex++ зависит от компилятора. Неа-это тернарный оператор. Там всегда сначала вычисляется условие. Дело было в постфиксном ++ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться