Перейти к содержанию
    

Приведение типов в Си

Действительно, проверил в GCC и IAR - все аналогично. Тогда вопрос снимается! Конечно у меня остается некоторое непонимание, как раньше оно у меня работало в двух разных проектах, которым уж более 10 лет. Забавно. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/15/2023 at 2:04 PM, kan35 said:

У меня такое предположение, что, наверное, в более новых компиляторах (может и в стандартах это и описано), они учли, что если уж приводишь сразу к unsigned, то не надо втаскивать двоичное дополнение в виде FF, если бы мне это было нужно, я бы делал signed. Ну а с точки зрения суровых ранних компиляторов нужно все делать корректно, приводя тип "постепенно".

Тогда для исключения подобных финтов от новых компиляторов надо, как минимум, свои старые проекты прогнать через современный Линтер для Си и посмотреть на что он ругается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, _4afc_ сказал:

Тогда для исключения подобных финтов от новых компиляторов надо, как минимум...

Да нет никаких финтов у новых компиляторов. И старые, и новые работают одинаково правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Arlleex said:

Да нет никаких финтов у новых компиляторов. И старые, и новые работают одинаково правильно.

Несогласен. Перенос на Watcom  с GCC требовал рефакторинга кода, особенно устранения отсутствия скобок между логическими и арифметическими операциями.

Правильно - это когда согласно правилам, а правила как раз в линтерах и можно проверить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, _4afc_ сказал:

Перенос на Watcom  с GCC требовал рефакторинга кода, особенно устранения отсутствия скобок между логическими и арифметическими операциями.

Если он этого требовал, значит он не был компилятором си(си++).

13 минут назад, _4afc_ сказал:

Правильно - это когда согласно правилам, а правила как раз в линтерах и можно проверить...

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

2 часа назад, _4afc_ сказал:

Тогда для исключения подобных финтов от новых компиляторов

В чём именно "финт компилятора"? В том, что он соблюдает правила языка, которых не знает кодонаписатель?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Если он этого требовал, значит он не был компилятором си(си++).

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

В чём именно "финт компилятора"? В том, что он соблюдает правила языка, которых не знает кодонаписатель?

Это демагогия, типа: "преимущество Си - в кроссплатформенности и переносимости".

На самом деле новый компилятор, или железо потребует рефакторинга кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, _4afc_ сказал:

На самом деле новый компилятор, или железо потребует рефакторинга кода.

бррр... :wacko2: Вы вообще поняли о чём тут шла речь?? Речь шла о том, что изначально ТС не знал правил приведения типов в си. Отсюда и проблемы у него.

Какой "рефакторинг"? Если код кривой, то вне зависимости от компилятора он требует исправления. Компилятор тут не при чём, новый он или старый.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, jcxz said:

 Речь шла о том, что изначально ТС не знал правил приведения типов в си. Отсюда и проблемы у него.

Как об этом узнать? Нет варнингов - код правильный.

 

41 minutes ago, jcxz said:

Какой "рефакторинг"? Если код кривой, то вне зависимости от компилятора он требует исправления. Компилятор тут не при чём, новый он или старый.

Как ищем кривой код в милионах строк чужого кода? Глазами - рефакторинг, программами - линтер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, _4afc_ сказал:

Как об этом узнать? Нет варнингов - код правильный.

Сильное заявление.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/17/2023 at 5:31 PM, _4afc_ said:

Как об этом узнать? Нет варнингов - код правильный.

Quote

$ gcc -pedantic 1.c
1.c: In function ‘main’:
1.c:3:19: warning: overflow in conversion from ‘int’ to ‘signed char’ changes value from ‘136’ to ‘-120’ [-Woverflow]
    3 |   signed char x = 0x88;
      |                   ^~~~

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, sasamy said:

warning: overflow in conversion from ‘int’ to ‘signed char’ changes value from ‘136’ to ‘-120’ [-Woverflow]

О! если есть хоть один варнинг - код неправильный с точки зрения копмилятора.

т.е. если такое и в предыдущих версиях gcc - то виноват тот кто собрал на них в изделие код с варнингом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, _4afc_ сказал:

Как об этом узнать? Нет варнингов - код правильный.

char c;
...
*(int *)&c = 0x12345678;

реально правильный??  :vava:

Ведь варнингов нет. :unknw:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...