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

Тэги для принудительной последовательности компиляции С-кода

19 minutes ago, Quantum1 said:

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

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

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


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

On 6/6/2024 at 4:34 PM, Stepanov said:

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

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

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

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


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

4 минуты назад, Quantum1 сказал:

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

Ну вы ж понимаете, что это из области фантастики. Ибо прагмы у разных компиляторов разные... И уж причем тут архитектура процессора? Мы ж не про асм говорим, а про Си...

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

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


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

On 6/6/2024 at 5:40 PM, mantech said:

Ну вы ж понимаете, что это из области фантастики. Ибо прагмы у разных компиляторов разные... И уж причем тут архитектура процессора? Мы ж не про асм говорим, а про Си...

 

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

 

 

 

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

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

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


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

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

Уж простите, но так может говорить только человек не писавший проекты с объемом больше 1000 строк)

или не писавший под МК с реалтаймом.

:biggrin::biggrin::biggrin:

нет слов....

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

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

Без volatile это не поможет. Так как компилятор вправе их заинлайнить, а потом сделать всё то же самое, что и без функций.

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

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

Любая программа это и есть жесткая последовательность действий. Но если вы её компилируете оптимизирующим компилятором, то для него важны только функция main и все действия с volatile сущностями. Остальное он воспринимает как описание того что вы с ними хотите сделать. Если вы этого не понимаете, то получаете то что на вашей картинке.

+++

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


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

On 6/6/2024 at 6:32 PM, jcxz said:

 

Без volatile это не поможет. Так как компилятор вправе их заинлайнить, а потом сделать всё то же самое, что и без функций.

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

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

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

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


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

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

Ну вы ж понимаете, что это из области фантастики. Ибо прагмы у разных компиляторов разные... И уж причем тут архитектура процессора? Мы ж не про асм говорим, а про Си...

Это не из области фантастики. Это называется volatile. Стандартно и поддерживается всеми компиляторами. Но ТС упорно не хочет его использовать. Видимо тут какое-то религиозное табу. Харам. Типа неприятия некошерных продуктов.  :biggrin:

Стоит задача: сделать то же, что делает volatile, но без volatile. :umnik2:  задачка.... впрочем - каждый сходит с ума как ему вздумается  :unknw:

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

Я готов поспорить, на что угодно, что не просто поможет, а даже сделает volatile не обязательным

Вполне возможно. Даже скорее - наверняка в каком-то компиляторе имеется какая-то pragma, аналогичная volatile по эффекту. И можно обойтись только ею.

Только вопрос - ЗАЧЕМ??? Если есть стандартный volatile, и он делает всё что нужно.

 

Всякие pragma - это внеязыковые сущности, которые опциональны для поддержки в компиляторах. Vendor-specific. В то время как volatile - часть стандарта языка, обязательная к поддержке компилятором. Сегодня ваша pragma есть, завтра (в новом компиляторе) её уже может и не быть.

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


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

On 6/6/2024 at 6:41 PM, jcxz said:

Это не из области фантастики. Это называется volatile. Стандартно и поддерживается всеми компиляторами. Но ТС упорно не хочет его использовать. Видимо тут какое-то религиозное табу. Харам. Типа неприятия некошерных продуктов.  :biggrin:

Стоит задача: сделать то же, что делает volatile, но без volatile. :umnik2:  задачка.... впрочем - каждый сходит с ума как ему вздумается  :unknw:

Вполне возможно. Даже скорее - наверняка в каком-то компиляторе имеется какая-то pragma, аналогичная volatile по эффекту.

Только вопрос - ЗАЧЕМ??? Если есть стандартный volatile, и он делает всё что нужно.

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

 

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

 

или вы и это будете оспаривать?

 

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

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

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


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

7 minutes ago, Quantum1 said:

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

Самое прямое отношение:

Quote

A volatile declaration may be used to describe an object corresponding to a memory-mapped
input/output port or an object accessed by an asynchronously interrupting function. Actions on
objects so declared shall not be ‘‘optimized out’’ by an implementation or reordered except as
permitted by the rules for evaluating expressions.

 

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


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

Меняйте компилятор на тот, на котором все работало, раз этот испортился.

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


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

Никакой отсебятины в порядке доступа к volatile-объектам компилятор позволять не имеет права.

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


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

12 минут назад, Quantum1 сказал:

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

Вот не надо врать! Пока вы никакого кода не приводили.

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

12 минут назад, Quantum1 сказал:

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

volatile вообще-то запрещает любую оптимизацию обращений к объекту. Про "внешний источник", это уже вы сами придумали.

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


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

3 часа назад, Stepanov сказал:

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

Эта технология, кажется, называется "рукожопное программирование"?

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


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

On 6/6/2024 at 6:58 PM, aaarrr said:

Самое прямое отношение:

A volatile declaration may be used to describe an object corresponding to a memory-mapped
input/output port or an object accessed by an asynchronously interrupting function. Actions on
objects so declared shall not be ‘‘optimized out’’ by an implementation or reordered except as
permitted by the rules for evaluating expressions.

 

И как мы видим, в моем случае, компилятор творит дичь именно на выражениях....

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


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

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

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

Вам бы корону что-ль снять. Или ЧСВ своё поуменьшить.

По-крайней мере до тех пор, пока хоть научитесь 10 строк кода без 10 багов в них писать. :biggrin:

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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