Милые шалости тернарного оператора

Upper
Offline
Зарегистрирован: 23.06.2020

Объяснить не могу. Но исходный код у меня не UNO не запустился как и у andriano.

Потом, (после заверений, что код точно рабочий) проверил в Протеусе - компилируется.

Методом тыка - у меня если в IDE написать на одной строчке, то компилируется 

template <typename T> T mod (T a, int16_t b) {

Если как в исходнике, то не компилируется 

template <typename T> 
T mod (T a, int16_t b) {
 
Arduino 1.8.5    UNO
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Upper пишет:

Объяснить не могу. Но исходный код у меня не UNO не запустился как и у andriano.

Потом, (после заверений, что код точно рабочий) проверил в Протеусе - компилируется.

Методом тыка - у меня если в IDE написать на одной строчке, то компилируется 

template <typename T> T mod (T a, int16_t b) {

Если как в исходнике, то не компилируется 

template <typename T> 
T mod (T a, int16_t b) {
 
Arduino 1.8.5    UNO

Видео посмотри пожалуйста. Нельзя же до такой степени.........!!!

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Upper пишет:

Объяснить не могу. Но исходный код у меня не UNO не запустился как и у andriano.

Если троллинг - тебе простительно, ты моих "больных мест" не знаешь, но все равно брехня - отвратительное занятие!

Если же и правда на старых версиях есть такой глюк, то даже не знаю что и сказать...

---------------------------

Женя, разве какая-то версия стандарта требовала размещения в одну строку? Это уже такие тонкости, которые я на память не воспроизведу.

 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016
if vs ()?():()===> 978 978
if vs ()?():()===> 415 951
if vs ()?():()===> 878 878
if vs ()?():()===> 666 202
if vs ()?():()===> 322 322
if vs ()?():()===> 261 261
if vs ()?():()===> 86 86
if vs ()?():()===> 52 52
if vs ()?():()===> 598 134
if vs ()?():()===> 308 308
if vs ()?():()===> 402 402
if vs ()?():()===> 984 984
if vs ()?():()===> 627 163
if vs ()?():()===> 821 357
if vs ()?():()===> 55 55
if vs ()?():()===> 271 807
if vs ()?():()===> 291 291
if vs ()?():()===> 359 359
if vs ()?():()===> 706 706
if vs ()?():()===> 758 294
if vs ()?():()===> 241 241
if vs ()?():()===> 479 479
if vs ()?():()===> 740 276
if vs ()?():()===> 399 399
if vs ()?():()===> 837 373
if vs ()?():()===> 848 384

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ua6em пишет:

Спасибо, дорогой!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:

Женя, разве какая-то версия стандарта требовала размещения в одну строку? 

Нет, а вот трогательная забота разработчиков Ардуино о блондинках и беременных доярках (чтобы они могли функции в любом порядке определять) опять подговнила.

Я взял 1.8.5 как у Upper, получил такую же ошибку. А теперь посмотри как IDE перекорёжила твой файл перед подсовыванием компилятору.

Версия 1.8.5

#include <Arduino.h>
#line 1 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
#line 1 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
const  int16_t Modulo = 1000;

template<typename T>
#line 4 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
T mod (T a, int16_t b) ;
#line 10 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
int Wprintf(const char* __fmt, ...);
#line 19 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
void setup();
#line 23 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
void loop();
#line 4 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
T mod (T a, int16_t b) {
  T x = a % b;
  if (x < 0) return x + b;
  return x;
}

int Wprintf(const char* __fmt, ...) {
  char s[64];
  va_list ap;
  va_start(ap, __fmt);
  vsnprintf(s, 64, __fmt, ap);
  va_end(ap);
  Serial.print(s);
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  int16_t x = random(Modulo);
  int16_t y = random(Modulo);

  uint16_t ux = x;
  uint16_t uy = y;

  int rIF, rTER;

  if (x < y) rIF = mod((x - y), Modulo) ;
  else rIF = mod((uy - ux), Modulo) ;

  rTER = mod((x < y) ? (x - y) : (uy - ux), Modulo);

  Wprintf ("if vs ()?():()===> %d %d\n", rIF, rTER);

  delay(1000);
}

Версия 1.8.13

#include <Arduino.h>
#line 1 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
const  int16_t Modulo = 1000;
#line 2 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
template<typename T>T mod (T a, int16_t b);
#line 10 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
int Wprintf(const char* __fmt, ...);
#line 19 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
void setup();
#line 23 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"
void loop();
#line 2 "D:\\GoogleD\\Soft\\Kaka\\Kaka1\\Kaka1.ino"

template<typename T>
T mod (T a, int16_t b) {
	T x = a % b;
	if (x < 0) return x + b;
	return x;
}

int Wprintf(const char* __fmt, ...) {
	char s[64];
	va_list ap;
	va_start(ap, __fmt);
	vsnprintf(s, 64, __fmt, ap);
	va_end(ap);
	Serial.print(s);
}

void setup() {
	Serial.begin(115200);
}

void loop() {
	int16_t x = random(Modulo);
	int16_t y = random(Modulo);

	uint16_t ux = x;
	uint16_t uy = y;

	int rIF, rTER;

	if (x < y) rIF = mod((x - y), Modulo) ;
	else rIF = mod((uy - ux), Modulo) ;

	rTER = mod((x < y) ? (x - y) : (uy - ux), Modulo);

	Wprintf ("if vs ()?():()===> %d %d\n", rIF, rTER);

	delay(1000);
}

Конкретно надо сравнить строки №№ 6-8 у версии 1.8.5 со строкой №5 у версии 1.8.13

andriano, я бы обновил IDE. ХЗ чего ещё от неё прилетит :-(

bwn
Offline
Зарегистрирован: 25.08.2014

wdrakula пишет:

Сережа! Ну проверь себя. Ну пожалуйста!!! Все работает в штатной ИДЕ 1.8.13. Форум попросить помочь скомпилировать??? Ну блин! Я никогда не публикую код, не запустив. Ты просто оскорбляешь меня, прости за резкость.

Влад, не срача ради. На UNO/IDE 1.6.4. Палеозоефил я, и чо?
Хоть из твоего поста, хоть от Сергея.

 
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard C:\TEMP\build8326269543088692197.tmp\sketch_apr10a.cpp -o C:\TEMP\build8326269543088692197.tmp\sketch_apr10a.cpp.o 
sketch_apr10a.ino:2:1: error: 'T' does not name a type
'T' does not name a type
 

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

:)) Прочти выше реплику Жени. ...и обнови ИДЕ ;)).

==========================

ЗЫ: Если я потерял 4 часа сна в Шаббат и почти получил очередной сердечный приступ ПРОСТО от того, что у некоторых некрофилов не обновлено ИДЕ, то сегодня точно не мой день! Блин!!!!!!!!!

====================

ЗЗЫ: Но нельзя же до такой степени не знать язык программирования, чтобы не понять, что там нет ошибки, а значит есть глюки ИДЕ????

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ЕвгенийП пишет:
Я взял 1.8.5 как у Upper, получил такую же ошибку. А теперь посмотри как IDE перекорёжила твой файл перед подсовыванием компилятору.

Спасибо, Женя.

Не считаю, что это может служить оправданием. Отсутствие ошибок все-таки видно в коде из 20 строк.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:
Но нельзя же до такой степени не знать язык программирования

Почему нельзя? Непросто, конечно, но специалисты имеются. Как-то больно быстро ты забываешь великих людей осчастлививших нас своим присутствием. Вот читай и наслаждайся, тут каждая буква - шедевр:

ЕвгенийП пишет:
Ваш множитель, определённый как

#define TSC_PERIOD      (1000/1024) 

попросту равен нулю в силу специфики целочисленной арифметики.

Arhat109-2 пишет:

:) Он не равен 0 даже в целочисленной арифметике. Это макропродстановка и в нормальном выражении он будет выглядеть так:

int time = 100*TSC_PERIOD; что после разворачивания макроса даст

int time = 100*(1000/1024); что после предвычисления компилятором константы даст 97,65625 что после преобразования компилятором к целой константе даст 97, что и требовалось. :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ЕвгенийП пишет:

wdrakula пишет:
Но нельзя же до такой степени не знать язык программирования

Почему нельзя? Непросто, конечно, но специалисты имеются. Как-то больно быстро ты забываешь великих людей осчастлививших нас своим присутствием. Вот читай и наслаждайся, тут каждая буква - шедевр:

;)) Я помню эту прелесть! Спасибо за позитив!

SLKH
Offline
Зарегистрирован: 17.08.2015

wdrakula пишет:

:)) Прочти выше реплику Жени. ...и обнови ИДЕ ;)).

==========================

ЗЫ: Если я потерял 4 часа сна в Шаббат и почти получил очередной сердечный приступ ПРОСТО от того, что у некоторых некрофилов не обновлено ИДЕ, то сегодня точно не мой день! Блин!!!!!!!!!

====================

ЗЗЫ: Но нельзя же до такой степени не знать язык программирования, чтобы не понять, что там нет ошибки, а значит есть глюки ИДЕ????

to All: 

1. М.б., следует всегда указывать в листингах релиз IDE?

2. ИМХО, добавить 1 раз в файл BareMinimum.ino первой строкой /* Arguino 1.8.13 */  (или что там у кого) совсем несложно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

SLKH пишет:

to All: 

1. М.б., следует всегда указывать в листингах релиз IDE?

2. ИМХО, добавить 1 раз в файл BareMinimum.ino первой строкой /* Arguino 1.8.13 */  (или что там у кого) совсем несложно.

Я согласен с тобой, но не указание версии может извинить, разве что, совсем чайника.

bwn
Offline
Зарегистрирован: 25.08.2014

wdrakula пишет:

Я согласен с тобой, но не указание версии может извинить, разве что, совсем чайника.

Влад, я вроде сразу сказал, "не срача ради". И даже проверять не собирался, но ты сам попросил. Как то так.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

bwn пишет:

wdrakula пишет:

Я согласен с тобой, но не указание версии может извинить, разве что, совсем чайника.

Влад, я вроде сразу сказал, "не срача ради". И даже проверять не собирался, но ты сам попросил. Как то так.

Так к тебе вопросов вроде нет? Ты ж не называешь себя программистом ;)) и не споришь со мной или Женей. Ты прояснил ситуацию, что и правда на древних версиях - бардак, за что тебе большое спасибо!

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

bwn пишет:

 И даже проверять не собирался

И, кстати, почему? Ведь интересные же примеры? У Жени сразу результаты приведены, а мне хотелось, чтобы читатель именно сам запустил и увидел неожиданный результат.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Сережа! Ну проверь себя. Ну пожалуйста!!! Все работает в штатной ИДЕ 1.8.13. Форум попросить помочь скомпилировать??? Ну блин! Я никогда не публикую код, не запустив. Ты просто оскорбляешь меня, прости за резкость.

А в IDE версии 1.8.5 не компилируется.

Мне казалось, что в этой теме обсуждаются свойства языка, а не хакерские приемы. Если различие между условным и тернарным оператором - свойство языка, то правильный код, демонстрирующий это различие, должен одинаково работать при любом компиляторе, любой версии последнего и любых ключах компиляции. Если же наблюдается различие в поведении в зависимости от какого-либо из вышеприведенных параметров, значит, код - неправильный, а потому не может быть использован для доказательства чего бы то ни было.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Сергей! Твое поведение - недопустимо!!!!!!!!!!!!!!!!!!!!!!!!!!!

Я так понимаю, на форуме царит абсолютная монархия, позволяющая одному участнику форума безоговорочно оценивать поведение любых других участников?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

 

А в IDE версии 1.8.5 не компилируется.

Мне казалось, что в этой теме обсуждаются свойства языка, а не хакерские приемы. Если различие между условным и тернарным оператором - свойство языка, то правильный код, демонстрирующий это различие, должен одинаково работать при любом компиляторе, любой версии последнего и любых ключах компиляции. Если же наблюдается различие в поведении в зависимости от какого-либо из вышеприведенных параметров, значит, код - неправильный, а потому не может быть использован для доказательства чего бы то ни было.

Все перечисленные требования соблюдены. Укажи, какое из ТОБОЙ перечисленных требований не соблюдается, или ты - трепло.

Какие хакерские приемы??????????????????????????? Та с ума сошел?

Прочти, что написал Женя. Это именно глюк старых иде. В последней версии нормально все собирается, что и подтвердили участники. Я виноват, что у тебя старая версия с неисправленной ошибкой??? НЕ КОМПИЛЯТОРА.

Я настаиваю на извинениях!!!! Просто очень стыдно должно быть тебе! Или ты просто ......, не признающий своих ошибок.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

wdrakula пишет:

Сергей! Твое поведение - недопустимо!!!!!!!!!!!!!!!!!!!!!!!!!!!

Я так понимаю, на форуме царит абсолютная монархия, позволяющая одному участнику форума безоговорочно оценивать поведение любых других участников?

Извинения будут?

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Меня Андриано обвинил в подлоге...

Влад, ну понимаю, вчера вечером принял на грудь, но с утра-то...

Пока на сегодняшний момент последняя версия: результат компиляции зависит от версии IDE.

На мой взгляд, этот факт однозначно свидетельствует о том, что такой код является неправильным, а потому не имеющим доказательной силы. Другими словами, код, демонстрирующий различие операторов, на Си пока не приведен. Повторяю: настоящий абзац - мое личное мнение, предыдущий абзац, на мой взгляд, отражает текущее положение дел, ну а самый первый абзац - всплеск эмоций, имеющий под собой такую же эмоциональную (но не доказательную) основу.

Да, первоначально пытался скомпилировать под Uno, но коль скоро было оговорено, что компилировать следует под Nano, именно так и было сделано. Но - чудес не бывает, результат от смены платформы не изменился.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Андриано, я предлагаю Вам внимательно прочитать сообщения в теме, опубликованные после Вашего неподобающего, на мой взгляд, выпада.

После этого ответить на вопросы:

1. Есть ли ошибка в моем коде. ?

2. Если есть, в какой строке?

3. В какой строке использован "хакерский прием"?

4. В чем причина того, что в Вашей версии ИДЕ не собирается скетч? (ошибка в моем коде, недопустимый прием в моем коде, особенность компилятора или что-то еще).

С уважением, Владислав.

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

На мой взгляд, этот факт однозначно свидетельствует о том, что такой код является неправильным

Прошу Вас прочесть сообщение №56. А потом принести извинения.

 

bwn
Offline
Зарегистрирован: 25.08.2014

wdrakula пишет:

И, кстати, почему? Ведь интересные же примеры? У Жени сразу результаты приведены, а мне хотелось, чтобы читатель именно сам запустил и увидел неожиданный результат.

Во первых, тебе я в общем то верю на слово, не замечал лукавства и манипуляций.
Во вторых, я не пользуюсь тернарными операторами и согласен с ранее озвученной версией, что не надо плодить сущности без надобности. Их присутствие в кодах, в основной массе есть заявка на: дывитеся як я умею. Это ИМХО.
Сам стараюсь писать так, чтобы человек-непрограммист, мог взять словарик и перевести мой алгоритм на обычный язык. Это тоже ИМХО.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

Другими словами, код, демонстрирующий различие операторов, на Си пока не приведен.

Я пока, все-таки надеюсь на Вашу порядочность и напоминаю, что когда я был неправ в горячности, я извинился, хотя Вы в хамской форме и предположили противное.

Если Ваша квалификация не позволила Вам понять, что шаблон функции - не более, чем украшение кода, то я ниже приведу код без него, не использующий никаких конструкций из С++. это ТОТ ЖЕ САМЫЙ код. Из него убран шаблон и добавлен возврат из обертки печати, вот про него я действительно забыл, но он не вызывает ошибок нигде, кроме ESP32.

const  int16_t Modulo = 1000;


int Wprintf(const char* __fmt, ...) {
  char s[64];
  int r;
  va_list ap;
  va_start(ap, __fmt);
  r =vsnprintf(s, 64, __fmt, ap);
  va_end(ap);
  Serial.print(s);
  return r;
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  int16_t x = random(Modulo);
  int16_t y = random(Modulo);

  uint16_t ux = x;
  uint16_t uy = y;

  int rIF, rTER;

  if (x < y) rIF = ((x - y) % Modulo) ;
  else rIF = ((uy - ux)% Modulo) ;

  rTER = ((x < y) ? (x - y) : (uy - ux))% Modulo;

  Wprintf ("if vs ()?():()===> %d %d\n", rIF, rTER);

  delay(1000);
}

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

bwn пишет:

Во первых, тебе я в общем то верю на слово, не замечал лукавства и манипуляций.

Спасибо на добром слове.

bwn пишет:

не надо плодить сущности без надобности.

Сам стараюсь писать так, чтобы человек-непрограммист, мог взять словарик и перевести мой алгоритм на обычный язык.

Это, конечно не так. Инструменты языка созданы не для "понтов", а для удобства разработчика и читателя. Не реально требовать воспринимать код для неподготовленного человека. ;)) Тоже имхо, конечно, но это как разбираться в вине.

[/quote]

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

:)) Прочти выше реплику Жени. ...и обнови ИДЕ ;)).

==========================

ЗЫ: Если я потерял 4 часа сна в Шаббат и почти получил очередной сердечный приступ ПРОСТО от того, что у некоторых некрофилов не обновлено ИДЕ, то сегодня точно не мой день! Блин!!!!!!!!!

====================

Влад, K&R изданы 43 года назад, но мы до сих пор рекомендуем эту книгу для изучения. А ты меня попрекаешь не обновлявшейся 3 года IDE. Где логика?

Я поступаю по древнему программистскому правилу: "Если работает, ничего не трогай".

Цитата:

ЗЗЫ: Но нельзя же до такой степени не знать язык программирования, чтобы не понять, что там нет ошибки, а значит есть глюки ИДЕ????

А я не знаю именно до такой степени. Так что, оказывается, - можно.

Нет, я ведь никогда не скрывал, что Си/Си++ - не мои родные языки. Я пользуюсь их подмножеством, которое является полным - в том смысле, что позволяет записать любой алгоритм. И мне этого хватает. Естественно, я время от времени интересуюсь теми свойствами языка, которые ранее выпадали из сферы моего познания. И, в частности, я всегда с интересом и удовольствием читаю статьи ЕП, из которых нередко черпаю для себя новое. Но, тем не менее, для меня знание языков Си/Си++ - не самоцель. Поэтому - мне хватает полного подмножества, а остальное - факультатив.

Теперь, на какую аудиторию ориентирована статья Евгения?

Мне кажется, всех посетителей форума можно грубо разделить на 4 категории:

1. Новички, которые еще не вполне освоили даже минимальное полное подмножество Си/Си++.

2. Люди, занимающиеся программированием от случая к случаю и не видящие причин выходить за минимальное полное подмножество указанных языков.

3. Люди, программирующие на нескольких разных языках, среди которых Си/Си++ не являются доминирующими.

4. Люди в совершенстве знающие Си/Си++.

Так вот, для 1-й категории статья бесполезна, для 4-й - не интересна, 2-я тоже вряд ли проявит интерес к написанному. Остается одна 3-я категория, к которой я себя и отношу. Другими словами, IMHO статья написана для таких людей как я. 

То, что я написал, что я сильно разочарован статьей - это чистая правда. Я, прочитав начало, понял, что сам я не способен придумать пример, иллюстрирующий разницу приведенных в начале конструкций. Поэтому я с интересом стал читать, надеясь такой пример найти. Увы, такого примера не нашлось, а для тех примеров, что были приведены, у меня оказалось недостаточно знаний, чтобы переделать их именно под шаблон, который приведен в начале статьи. Т.е. я ожидал от этой статьи определенного знания, а это знание не получил, чем и был разочарован. И мое разочарование, пока я не увижу (а сам я их составить не способен, по крайней мере, - сходу) примеров, иллюстрирующих разницу операторов на примере как Си, так и Си++, не пройдет.

В общем, мир таков, каков он есть, а не таков, каким бы мы хотели его видеть. И знания наши такие, какие они есть, а не такие, какими они должны были бы быть, исходя из реплики "нельзя же до такой степени не знать язык". Я вот не знаю именно до такой степени. Но мое "незнание" лежит за пределами минимального полного набор свойств языка, а потому оно не мешает мне писать, возможно, не оптимальные, но - любые программы. И еще я думаю, что статья нацелена на аудиторию, в которой знание языка находится примерно на моем уровне (хотя это, признаю, достаточно сильное допущение). Поэтому предполагать иное (т.е. то, что читатели обязаны знать язык в совершенстве) - не более, чем повод покрасоваться.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Ведь интересные же примеры? У Жени сразу результаты приведены, а мне хотелось, чтобы читатель именно сам запустил и увидел неожиданный результат.

Влад, вот не поверишь! Я действительно получил ну совершенно неожиданный результат! Получить от тебя код, который не будет компилироваться, я себе раньше и представить такого не мог.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

Мне казалось, что в этой теме обсуждаются свойства языка

Совершенно верно

andriano пишет:

Если различие между условным и тернарным оператором - свойство языка, то правильный код, демонстрирующий это различие, должен одинаково работать при любом компиляторе, любой версии последнего и любых ключах компиляции.

Он именно так и работает.

andriano пишет:

Если же наблюдается различие в поведении в зависимости от какого-либо из вышеприведенных параметров,

Не наблюдается.

andriano пишет:
результат компиляции зависит от версии IDE.

Стоп! В данной теме обсуждаются свойства языка, а не свойства IDE, которая является глючной прокладкой между программистом и компилятором языка. Прокладкой, которая преиначивает написанное программистом так, что нарушает синтаксис языка.

Позвольте ещё раз напомнить Вашу цитату:

andriano пишет:

.... должен одинаково работать при любом компиляторе, любой версии последнего и любых ключах компиляции ... Если же наблюдается различие в поведении в зависимости от какого-либо из вышеприведенных параметров

Не наблюдается, т.к. версии IDE среди вышеприведённых параметров нет. А различие наблюдается именно в зависимости от неё.

Сергей, но Вы же видите (см. пост #56) что из-за ошибки в IDE код оказался испорченным до синтаксической неправильности. Видите. Так зачем упираться-то и говорить, что программист виноват или там язык? 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Я настаиваю на извинениях!!!! Просто очень стыдно должно быть тебе! Или ты просто ......, не признающий своих ошибок.

А мне вот, представь, - не стыдно. Я столкнулся с непонятным мне поведением приведенного тобой кода (заметь, я никого ни в чем не обвинял),  задал по этому поводу вопрос на форуме. Как я должен был поступить?

Ну а с извинениями, так без проблем:

Владислав, я приношу Вам свои искренние извинения.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

andriano пишет:

wdrakula пишет:

Сергей! Твое поведение - недопустимо!!!!!!!!!!!!!!!!!!!!!!!!!!!

Я так понимаю, на форуме царит абсолютная монархия, позволяющая одному участнику форума безоговорочно оценивать поведение любых других участников?

Извинения будут?

 

А вот по этому поводу как раз я хотел бы поинтересоваться: извинения будут?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

4. В чем причина того, что в Вашей версии ИДЕ не собирается скетч? (ошибка в моем коде, недопустимый прием в моем коде, особенность компилятора или что-то еще).

Да, признаю, что я сделал неправильный вывод: IDE не равно КОМПИЛЯТОР.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Извинений за испорченный Шаббат можно не ждать, жаль, что мои ожидания не оправдались.

andriano пишет:

 Поэтому предполагать, что читатели обязаны знать язык в совершенстве - не более, чем повод покрасоваться.

Знание, что конструкция вида:

template<typename T>
T mod (T a, int16_t b) {
 //код
}

не содержит ошибок, и сделать вывод о неадекватном преобразовании в ИДЕ, это "знание в совершенстве"? Прошу меня простить, но шаблоны функций это знание С++ на уровне школьника, а никак не "в совершенстве". Равно как и знание тернарного оператора, который присутствует в ЛЮБОМ языке программирования, кроме уж совсем диких. И в ЛЮБОМ языке с неявными преобразованиями типов будет наблюдаться схожий эффект. Просто потому, что у оператора есть тип результата.

Неужели это не интересно, как важный для программирования вопрос? Мы же на программистском форуме, а не на форуме электриков! Это первоосновы - подводные камни неявного преобразования типов. Просто одно из проявлений.

Статья Жени  важна именно для чуть продвинутых новичков. Стараться избегать двусмысленностей при написании кода и научиться видеть те места, которые компилятору покажутся двусмысленными. Ровно как в соседней ветке про счетчик цикла на границе INT_MAX.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

А вот по этому поводу как раз я хотел бы поинтересоваться: извинения будут?

Вы, Андриано, defacto обвинили меня в подлоге и подтасовке. Думаю, что любое дальнейшее действие должно предваряться либо извинениями, либо объяснениями с подтверждением обвинений. Вам (пока) никто оскорблений не наносил.

 

 

Upper
Offline
Зарегистрирован: 23.06.2020

To Adriano. Наверное вас тролят

По условиям задачи надо показать различие
 
sig = <условие> ? <выражение 1> : <выражение 2>;
 
// И
 
if (<условие>) {
   sig = <выражение 1>;
} else {
   sig = <выражение 2>;
}
 
Показывают различие (и оно есть) в
 
if (x < y) rIF = ((x - y) % Modulo) ;
  else rIF = ((uy - ux)% Modulo) ;
 
rTER = ((x < y) ? (x - y) : (uy - ux))% Modulo;
 
 
А по условиям надо (и различия нет) в
 
rTER = ((x < y) ? (x - y)% Modulo : (uy - ux)% Modulo);
 
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

Владислав, я приношу Вам свои искренние извинения.

Спасибо! Это правда очень важно для меня.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Теперь я могу снова и без понтов написать некий оффтоп.

=======================================

Я никогда не вру, это некий пунктик в историю которого нет смысла вдаваться. Еще в матшколе шутили: "у Л..на(моя фамилия) честность, доходящая до глупости или глупость, доходящая до честности?". И, как следствие, чрезвычайно болезненно отношусь к обвинениям подобного толка.

Я очень прошу тебя, если ты не разберешься в чем-то, написанном мной, задай вопрос в менее двусмысленной форме.

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Upper пишет:

По условиям задачи надо показать различие
 
sig = <условие> ? <выражение 1> : <выражение 2>;
 
// И
 
if (<условие>) {
   sig = <выражение 1>;
} else {
   sig = <выражение 2>;
}

И такое тоже нужно пояснять?

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

Человек, назвавший себя программистом должен как-то сам подобные преобразования производить.

Добавлю, всё остально - украшалки, можно и модуль не брать. Не так красиво печатать будет. Ну это же понятно?

const  int16_t Modulo = 1000;


int Wprintf(const char* __fmt, ...) {
  char s[64];
  int r;
  va_list ap;
  va_start(ap, __fmt);
  r = vsnprintf(s, 64, __fmt, ap);
  va_end(ap);
  Serial.print(s);
  return r;
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  int16_t x = random(Modulo);
  int16_t y = random(Modulo);

  uint16_t ux = x;
  uint16_t uy = y;

  int rIF, rTER;
  long t;
  
/**************IF*********************/
  if (x < y) t = (x - y)  ;
  else t = (ux - uy) ;
  rIF = t % Modulo;
/**************TER********************/
  t = (x < y) ? (x - y): (ux - uy);
  rTER = t % Modulo;
/************************************/  
  Wprintf ("if vs ()?():()===> %d %d\n", rIF, rTER);

  delay(1000);
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

wdrakula пишет:

Это, конечно не так. Инструменты языка созданы не для "понтов", а для удобства разработчика и читателя. Не реально требовать воспринимать код для неподготовленного человека. ;)) Тоже имхо, конечно, но это как разбираться в вине.

Сорри, неверно выразил мысль. Имел в виду применение тернарных операторов не программистом, а новообращенным ардуинщиком, рисующим очередную реинкарнацию блинка. Сейчас нечасто здесь бываю, а раньше натыкался регулярно, вот это и расцениваю как туфли с помадой и тенями на пятикласснице. Аналогичное отношение к тому же бедному блинку, который решили написать манипуляцией битами, засунутыми в регистры, перемежая это врущими диджиталями. 
Неподготовленных сейчас уже просто нет, осталось еще наше поколение, хотя возможно уже и у тебя была информатика в школе, у нас этого предмета не было, а у супруги 71 года уже был.
Ну а уроки от ЕП читаю с удовольствием, даже если сегодня и не требуется, буду знать что так можно и место где освежить память.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Если Ваша квалификация не позволила Вам понять, что шаблон функции...

Моей квалификации о шаблоне известно только две вещи:

1. Где-то в дебрях Си существует такая штука, называемая шаблоном.

2. Без этих шаблонов вполне успешно можно писать программы. Причем, любые программы.

Все.

Ну а за пример - спасибо. Хотя вот лично на меня принудительное преобразование отрицательного числа в соответствующее ему по бинарному представлению положительное производит ощущение хакерского трюка. Хотя по существу - все правильно: разница между операторами заключается именно в насильственном приведении типа, а эффект от насильственного приведения типа проявляется исключительно при преобразовании отрицательного числа.

Кстати, если в примере вместо 16-разрядных чисел использовать 32-разрядные, демонстрационный эффект сохраняется, т.е. можно сказать, что работа примера не зависит от разрядности используемых чисел, за что ему безусловный плюс.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

Ну а за пример - спасибо. Хотя вот лично на меня принудительное преобразование отрицательного числа в соответствующее ему по бинарному представлению положительное производит ощущение хакерского трюка.

Еще раз благодарю за извинения. Теперь я могу спокойно общаться.

Тогда вопрос: в какой строке "принудительное" преобразование отрицательного числа?

То есть я не "ловлю" тебя. x и y - положительные и в строках 23 и 24 нет принудительного преобразования.

"Принудительное" собственно и возникает, ТОЛЬКО благодаря описанной Женей проблеме, в строке 34. Ради неё все и затевалось ;)).

НУМЕРАЦИЯ СТРОК по сообщению №88

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

andriano пишет:

А вот по этому поводу как раз я хотел бы поинтересоваться: извинения будут?

Вы, Андриано, defacto обвинили меня в подлоге и подтасовке.

Разве?

Позволю себе процитировать себя же:

andriano пишет:

wdrakula пишет:

Наслаждаемся.

Оно, вроде, красиво, но:

sketch_apr09a:4: error: 'T' does not name a type

 T mod (T a, int16_t b) {

 ^

exit status 1
'T' does not name a type

 

Где здесь обвинения?

Цитата:

Вам (пока) никто оскорблений не наносил.

Да?

А как же это?

wdrakula пишет:
Сережа! Будь внимательнее при копировании. Ты строчку template<> потерял.

Здесь меня явно (подчеркиваю - ЯВНО!) обвиняют в невнимательности и в совершении предосудительных действий (в виде потери строчки).

Читаем дальше:

wdrakula пишет:
Меня Андриано обвинил в подлоге

Обвинения в подлоге - это серьезное обвинение.

Теперь, когда выяснилось, что код не компилируется не только у меня, где опровержение насчет подлога и сопутствующие извинения?

Я оскорблен!

Кушать не могу!

Если я не получу извинений, умру от голода!

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Если ты не паясничаешь, а действительно считаешь, что я перегнул палку, то мне жаль. Приношу извинения.

Плохо то, что ты не понимаешь  оскорбительности твоих заявлений и переводишь в шутку. Не хотел бы обидеть - спросил бы "почему у меня не компилируется? ", но ты несколько раз самоуверенно заявил, что я опубликовал неправильный код с ошибками. Ты всё еще настаиваешь на этой дефиниции? Прямо ответь, плз.!

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Дуэль, однозначно. Масштаб проблемы и градус пикировки не оставляют вариантов. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

А ведь верно! На мясорубках! ;)

======================

Женя, дорогой. В принципе я удовлетворен и в дальнейшем "дожатии" Сергея не вижу смысла. Если ты сочтешь нужным, то предлагаю всё потереть к чертям, оставив только примеры. С темплейтом для красоты и последний, на "чистом С".

Дискуссия, имхо,  не имеет ценности для потомков.

--------------------------------

Еще раз, если я кого задел - прошу прощения. Я вспыльчив, это приобретенное на работе качество.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Плохо то, что ты не понимаешь  оскорбительности твоих заявлений и переводишь в шутку.

Влад, я в свою очередь рекомендую тебе перечитать собственные сообщения и подумать, а не содержатся ли в них оскорбительные заявления в адрес других участников форума. Ну и вспомнить пословицу про соринку и бревно.

Цитата:

... что я опубликовал неправильный код с ошибками. Ты всё еще настаиваешь на этой дефиниции? Прямо ответь, плз.!

Вообще-то я уже прямо ответил в сообщении №82. Если тебе будет приятно, процитирую:

andriano пишет:

Да, признаю, что я сделал неправильный вывод: IDE не равно КОМПИЛЯТОР.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

wdrakula пишет:

Дискуссия, имхо,  не имеет ценности для потомков.

Почему, очень даже. У меня есть блокнотик, куда я пишу как я не должен себя вести в 70 (через 25 лет, если доживу). Весь этот тред как раз и есть наглядный пример, каким не нужно становиться с возрастом  Так-то это лютый пиздец

sadman41
Offline
Зарегистрирован: 19.10.2016

Главное в этом деле - не забыть, куда положил блокнот.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

Влад, я в свою очередь рекомендую тебе перечитать собственные сообщения и подумать, а не содержатся ли в них оскорбительные заявления в адрес других участников форума. Ну и вспомнить пословицу про соринку и бревно.

Сорян, конечно, но поскольку не я первый начал, то "руки мои чисты"(с). Странно, что я от матюгов удержался.Пиво себе за это налью пожалуй...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula пишет:

Сорян, конечно, но поскольку не я первый начал, то "руки мои чисты"(с). 

Разве?

Тогда можно указать номер поста, с которого, по твоему мнению, все и началось?