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

Почему для GCC следующий код в полном порядке?

26 минут назад, MrYuran сказал:

Я ж говорю, давайте список ключей. Посмотрим, каких не хватает

https://habr.com/ru/articles/490850/

Цитата

-x c -funsigned-char -funsigned-bitfields -DNDEBUG  -I"../sources/application" -O0 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -Wall -mmcu=at90can128 -B "D:\Program Files\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\at90can128" -c -std=c99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"

Да я их даже не трогал - какие были стандартные в среде, такие оставил.

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


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

В 27.11.2023 в 14:55, Arlleex сказал:

Да я их даже не трогал - какие были стандартные в среде, такие оставил.

Ну, собственно, что и требовалось доказать. Ни одной проверки.

А потом долгими зимними вечерами обсуждаем "глюки компилятора"

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


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

8 минут назад, MrYuran сказал:

Ну, собственно, что и требовалось доказать. Ни одной проверки.

А потом долгими зимними вечерами обсуждаем "глюки компилятора"

Проверки на что? Мне то откуда знать, какие перлы в исходниках (я же написал, что я портировал не свои исходники), чтобы расставлять правильные ключи компиляции?

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


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

Ну, как минимум

Цитата

gcc -Wall enables all warning messages. ... gcc -Wall enables all compiler's warning messages. This option should always be used, in order to generate better code

 

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


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

Ну а если Вы вашим ГЦЦ скомпилите вот прямо эти самые файлы которые в начале нам продампили - он их и соберет?
Или может все же чтото Вы нам недопоказали?

 

Еще было б неплохо посмотреть результат постпроцессинга - как там ваши ваши объявления выглядят? может макро какое порылось

А еще може  какомто хедере завалялось еще и extern на вашу структуру, или хуже - статик

 

Изменено пользователем AlexRayne

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


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

41 минуту назад, MrYuran сказал:

Ну, как минимум

Ну, судя по моим ключам, -Wall у меня присутствует. И толку.

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


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

3 hours ago, Arlleex said:
// in global space
int i = 0;
int i;

Однако GCC "схавал"

Нифига подобного

Вот прям сегодня по ошибке написал такое, так g++ ткнул во вторую строку с предупреждением о неиспользуемой переменной. Надо смотреть на версию стандарта, поддерживаемую компилятором и на то, какие предупреждения разрешены или запрещены. Последние версии gcc стали более строже отслеживать подобное, а g++ на подобное всегда ругался, поэтому собирайте ваши программы g++, и будет вам Щастье.

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


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

30 минут назад, AlexRayne сказал:

Ну а если Вы вашим ГЦЦ скомпилите вот прямо эти самые файлы которые в начале нам продампили - он их и соберет?

Для примера я показал более, чем достаточно.
 

3 минуты назад, tonyk_av сказал:

Нифига подобного

Вот прям сегодня по ошибке написал такое, так g++ ткнул во вторую строку с предупреждением о неиспользуемой переменной. Надо смотреть на версию стандарта, поддерживаемую компилятором и на то, какие предупреждения разрешены или запрещены. Последние версии gcc стали более строже отслеживать подобное, а g++ на подобное всегда ругался, поэтому собирайте ваши программы g++, и будет вам Щастье.

g++ - это компилятор С++, как минимум. Сергей правильно заметил выше, что для C++ такое уже не работает (должно свалиться в ошибку redefinition symbol 'i', а не предупреждение с неиспользуемой переменной). В Си эта конструкция законна.

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


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

В 27.11.2023 в 16:37, Arlleex сказал:

Ну, судя по моим ключам, -Wall у меня присутствует. И толку.

Да, не заметил. 

Значит, добавить весь арсенал параноика:

Цитата

# Предупреждения:
WARNINGS  = -Wall
WARNINGS += -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare
WARNINGS += -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused
# WARNINGS += -Werror

и много чего ещё

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


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

1 hour ago, Arlleex said:

(должно свалиться в ошибку redefinition symbol 'i', а не предупреждение с неиспользуемой переменной)

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

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


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

вот с объявлением структур ооочень аккуратно надо. и я скакал по этим граблям (получал в разных файлах разные экземпляры структуры под одним и тем же именем). стал делать так, в заголовочнике:

#ifndef _sensor
#define _sensor


struct sensor_general_type{
                           unsigned  short int meash_interval_sec;
                          
                            };

#ifdef sensor_first_appear

struct sensor_general_type  sensor_general;

#else
extern  struct sensor_general_type  sensor_general;


#endif


#endif
 

в ОДНОМ месте в с или хедере так:

#define sensor_first_appear
#include "sensor.h"

во всех других местах так:


#include "sensor.h"

 

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


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

49 minutes ago, firstvald said:

вот с объявлением структур ооочень аккуратно надо

оно и видно ))

 

 

49 minutes ago, firstvald said:

стал делать так, в заголовочнике:

это пример как КАТЕГОРИЧЕСКИ делать НЕ НУЖНО ))

 

если смотреть по вашему примеру, то вы объявляете тип структуры в заголовочном файле, судя по наличию этой "конструкции":

#ifndef _sensor
#define _sensor

и в нем же по неведомой причине создаете ее экземпляр:

struct sensor_general_type  sensor_general;

И чтобы избежать очевидных проблем с таким "решением", плодите себе очевидные костыли:

#define sensor_first_appear

 

А это когда в умных  книжках по си (которому уже небось полвека от роду) пишут черным по белому - экземпляры создавать ТОЛЬКО в объектных С-файлах, а в хедерах максимум объявлять тип!

 

 

если уж вам так нужны глобальные объекты структур, то создавайте их экземпляры по возможности в одном месте, в одном С-файле, а в хедерах ТОЛЬКО ОБЪЯВЛЕНИЯ их типов

и туда же соотв. extern если нужно, чтобы другие объектные файлы "видели" эти глобальные объекты, если прям уж без них никак не получается )

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


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

вот, ни в коем случае, в сишных не надо. это проходит в том случае,  когда у вас маленький проект (вы помните, что где лежит) и когда вы не думаете о том,  что ваш код будет использоваться повторно в других проектах . и у вас декларация и объявление получаются тогда в разных файлах. попробуйте как попереносить кусок кода без ошибок копированием из файла в файл, когда пишете и у вас открыто с два три десятка закладок. а, когда вы пишите в пределах одного файла ,  вы гораздо меньше подвержены таким ошибкам. и вот точно никаких костылей тут нет. поэтому, когда я вижу код, который написан, как в умных книжках с полувековой историей,  я понимаю, что ждать бяды. и, хуже того, пацанов продолжают учить такому, люди никогда не занимавшиеся разработкой.

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


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

4 minutes ago, firstvald said:

и вот точно никаких костылей тут нет

Ужасный костыль, прямо-таки эталонный.

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


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

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

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


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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...