Забавно
От: m11  
Дата: 07.05.22 12:36
Оценка: -1
Почему это компилится?
без ошибок.
Clang правдо варнинг дает. а gcc и msvc вообше норм.

int main()
{ 
int value=1;
if (value==0) value;
return 0;
}
Отредактировано 07.05.2022 12:38 m11 . Предыдущая версия .
Re: Забавно
От: ArtDenis Россия  
Дата: 07.05.22 12:43
Оценка: 2 (1) +3
Здравствуйте, m11, Вы писали:

m11>Почему это компилится?

m11>без ошибок.

А в каком месте должна быть ошибка?
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Забавно
От: m11  
Дата: 07.05.22 13:52
Оценка:
m11>>Почему это компилится?
m11>>без ошибок.

AD>А в каком месте должна быть ошибка?


value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.
Re[3]: Забавно
От: ArtDenis Россия  
Дата: 07.05.22 14:03
Оценка:
Здравствуйте, m11, Вы писали:

m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.


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

#define RESET_FLAGS_ADDR 0xBAADF00D

void reset_flags() 
{
    *(*volatile uint32_t)(RESET_FLAGS_ADDR);
}


Правда, бывает что иногда пишут что-то типа
uint32_t tmp = *(*volatile uint32_t)(RESET_FLAGS_ADDR);

Видимо думают, что без uint32_t tmp = значение не прочитается ))

PS: причём тут паскаль, если форум про си и плюсы?
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Забавно
От: Pavel Dvorkin Россия  
Дата: 07.05.22 14:07
Оценка: :)
Здравствуйте, m11, Вы писали:

Ну зачем же так сложно ?


int main()
{
    1;
    return 0;
}
With best regards
Pavel Dvorkin
Re[3]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 07.05.22 15:08
Оценка: +1
Здравствуйте, m11, Вы писали:


m11>>>Почему это компилится?

m11>>>без ошибок.

AD>>А в каком месте должна быть ошибка?


m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.


А причем здесь "оператор"?

Упрощенно выражаясь, тело функции на языках С или С++ состоит из инструкций (statements). Statements бывают разных видов. Один из самых распространенных — expression statement, то есть выражение. `value;` — это вполне легальный expression statement.

Другое дело, что выражения мы обычно используем ради их результатов и/или побочных эффектов. Если у выражения и результат игнорируется, и побочных эффектов нет, то такое выражение бесполезно. Компилятор может выдать на эту тему предупреждение, если захочет. Но ошибки в этом нет.
Best regards,
Андрей Тарасевич
Отредактировано 07.05.2022 15:13 Андрей Тарасевич . Предыдущая версия . Еще …
Отредактировано 07.05.2022 15:10 Андрей Тарасевич . Предыдущая версия .
Re[2]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 07.05.22 15:09
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, m11, Вы писали:


PD>Ну зачем же так сложно ?


PD>

PD>int main()
PD>{
PD>    1;
PD>    return 0;
PD>}
PD>


По-прежнему дико переусложнено

int main()
{
  1;
}
Best regards,
Андрей Тарасевич
Re[2]: Забавно
От: prog123 Европа  
Дата: 07.05.22 15:10
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, m11, Вы писали:


PD>Ну зачем же так сложно ?


PD>

PD>int main()
PD>{
PD>    1;
PD>    return 0;
PD>}
PD>


зачем усложнять?
int main()
{
    1;
}
Re[3]: Забавно
От: m11  
Дата: 07.05.22 17:15
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>По-прежнему дико переусложнено


АТ>
АТ>int main()
АТ>{
АТ>  1;
АТ>}
АТ>


а почему тут нету C4716: '': must return a value ????
Re[3]: Забавно
От: m11  
Дата: 07.05.22 17:18
Оценка: :)
Здравствуйте, prog123, Вы писали:

P>зачем усложнять?

P>
int main()
P>{
P>    1;
P>}


Всегда можна усложнить
int main()
<% 1; %>
Re[4]: Забавно
От: Muxa  
Дата: 07.05.22 17:23
Оценка:
m11>Всегда можна усложнить

Или упростить:
int main;
Re[4]: Забавно
От: m11  
Дата: 07.05.22 17:26
Оценка: -1
Здравствуйте, ArtDenis, Вы писали:

AD>Правда, бывает что иногда пишут что-то типа

AD>
AD>uint32_t tmp = *(*volatile uint32_t)(RESET_FLAGS_ADDR);
AD>

AD>Видимо думают, что без uint32_t tmp = значение не прочитается ))

Оно только с volatile будет читать.
по идее с uint32_t tmp = должно всегда читать и без volatile

AD>PS: причём тут паскаль, если форум про си и плюсы?

Ну вроде как родственые языки. чесно говоря не ожидал такого от С++.
И куда смотрит комитет? Это источник же ошибок не?
Re[5]: Забавно
От: ArtDenis Россия  
Дата: 07.05.22 18:02
Оценка: +1
Здравствуйте, m11, Вы писали:

m11>по идее с uint32_t tmp = должно всегда читать и без volatile


Если включить оптимизацию, то без volatile не будет читать даже с uint32_t tmp =

m11>И куда смотрит комитет? Это источник же ошибок не?


А смысл, если это сломает обратную совместимость? Тем более что уже есть языки, в которых этот источник ошибок исключён.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Забавно
От: ArtDenis Россия  
Дата: 07.05.22 18:05
Оценка:
Здравствуйте, m11, Вы писали:

m11>а почему тут нету C4716: '': must return a value ????


Потому что согласно стандарту языка, выход из функции main аналогичен возврату нулевого значения.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[3]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.22 18:53
Оценка:
Здравствуйте, m11, Вы писали:

m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.


Да. В Си выражение является оператором. Вызов функции — это выражение, присваивание — это выражение (у него даже значение есть). А отдельного оператора присваивания в Си нет.

Предупреждения ты заслуживаешь за то, что твое выражение ничего вообще не делает. Но ошибкой это не является.
Re[5]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.22 18:55
Оценка: :)
Здравствуйте, m11, Вы писали:

m11>Ну вроде как родственые языки. чесно говоря не ожидал такого от С++.


Что в них родственного-то?

m11>И куда смотрит комитет? Это источник же ошибок не?


C++ — сам источник ошибок. Комитет смотрит, чтобы такого еще в него включить заковыристого перед выходом на пенсию.
Re[4]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.22 18:58
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>А причем здесь "оператор"?


АТ>Упрощенно выражаясь, тело функции на языках С или С++ состоит из инструкций (statements). Statements бывают разных видов. Один из самых распространенных — expression statement, то есть выражение. `value;` — это вполне легальный expression statement.


Оператор — это и есть statement. Так уж наши переводчики придумали, еще в советские времена.

И да, действительно, в си нет оператора присваивания, зато есть оператор — выражение.
Re[5]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.22 19:00
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Или упростить:

M>
M>int main;
M>


И что, такое до сих пор компилируется?
Re[5]: Забавно
От: m11  
Дата: 07.05.22 19:14
Оценка:
Здравствуйте, ArtDenis, Вы писали:

m11>>а почему тут нету C4716: '': must return a value ????


AD>Потому что согласно стандарту языка, выход из функции main аналогичен возврату нулевого значения.


А почему только из main? Где логика %\
Это до чего довели язык из других функций нельзя а из main можна ;|
Re[3]: Забавно
От: graniar  
Дата: 08.05.22 00:48
Оценка: :)))
Здравствуйте, m11, Вы писали:


m11>>>Почему это компилится?

m11>>>без ошибок.

AD>>А в каком месте должна быть ошибка?


m11>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.


По-хорошему должны быть ошибки типа:

"Ваш код не делает ничего полезного"
"Ваш код дублирует функциональность доступных публичных библиотек"
"Вы никчемный программист, найдите себе другое занятие"
Re[6]: Забавно
От: ArtDenis Россия  
Дата: 08.05.22 04:02
Оценка:
Здравствуйте, m11, Вы писали:

m11>Это до чего довели язык из других функций нельзя а из main можна ;|


Долго же ты спал )) Это стало стандартом в си с 99-года
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[5]: Забавно
От: ути-пути Россия  
Дата: 08.05.22 04:15
Оценка:
Здравствуйте, m11, Вы писали:

m11>по идее с uint32_t tmp = должно всегда читать и без volatile


Не должно, поскольку это можно соптимизировать без видимого изменения поведения.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: Забавно
От: rising_edge  
Дата: 08.05.22 04:59
Оценка:
Здравствуйте, ArtDenis, Вы писали:
AD>Это просто чтение значение переменной. После это значение не используется и просто теряется. Прикол в том, эта вещь применяется. Например, если устройство замапировано на адрес памяти, а чтение по специальному адресу например сбрасывает флаги устройства. Как-то так:

AD>
AD>#define RESET_FLAGS_ADDR 0xBAADF00D

AD>void reset_flags() 
AD>{
AD>    *(*volatile uint32_t)(RESET_FLAGS_ADDR);
AD>}
AD>


AD>Правда, бывает что иногда пишут что-то типа

AD>
AD>uint32_t tmp = *(*volatile uint32_t)(RESET_FLAGS_ADDR);
AD>

AD>Видимо думают, что без uint32_t tmp = значение не прочитается ))

С volatile особая песня. Это фактически запрет компилятору соптимизировать, т.е. попросту удалить неиспользуемую переменную.

Ещё один широко используемый приём:
void reset_flags(int x)
{
    (void) x;
}

Применяется для подавления сообщения компилятора о неиспользуемом аргументе функции.
Re[5]: Забавно
От: ArtDenis Россия  
Дата: 08.05.22 06:27
Оценка: :)
Здравствуйте, rising_edge, Вы писали:

_>С volatile особая песня. Это фактически запрет компилятору соптимизировать, т.е. попросту удалить неиспользуемую переменную.


Обрати внимание, что у меня нету переменной вообще. Есть только адрес и чтение по указанному адресу. volatile не запрещает компилятору оптимизировать. Она лишь даёт две гарантии:
1. Обращение по адресу (чтение или запись) будет обязательно произведено (оптимизатор не вправе его выкидывать)
2. Не будет переупорядочивания последовательности обращений к volatile

Возможно что-то ещё, но лень гуглить
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Забавно
От: -n1l-  
Дата: 08.05.22 14:51
Оценка:
Здравствуйте, m11, Вы писали:

m11>
m11>int main()
m11>{ 
m11>int value=1;
m11>if (value==0) value;
m11>return 0;
m11>}
m11>



Имхо, после оптимизаций компилятор все повыкидывает.

условие (value == 0) никогда не выполнится, значит можно выкинуть.
переменная value в итоге нигде не используется, можно выкинуть.
Re[4]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 08.05.22 16:09
Оценка: +1
Здравствуйте, m11, Вы писали:

m11>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>По-прежнему дико переусложнено


АТ>>
АТ>>int main()
АТ>>{
АТ>>  1;
АТ>>}
АТ>>


m11>а почему тут нету C4716: '': must return a value ????


Потому что это функция `main`, у которой особые правила. В ней не обязательно делать `return`. Не сделаешь `return` — будет автоматически сделано `return 0`.
Best regards,
Андрей Тарасевич
Re[2]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 08.05.22 16:11
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Здравствуйте, m11, Вы писали:


m11>>
m11>>int main()
m11>>{ 
m11>>int value=1;
m11>>if (value==0) value;
m11>>return 0;
m11>>}
m11>>



N>Имхо, после оптимизаций компилятор все повыкидывает.


N>условие (value == 0) никогда не выполнится, значит можно выкинуть.

N>переменная value в итоге нигде не используется, можно выкинуть.

Выполнится или не выполнится тут условие никакого значения не имеет. Программа вообще не имеет наблюдаемого поведения, значит все сразу будет выкинуто.
Best regards,
Андрей Тарасевич
Re[5]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 08.05.22 16:14
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>А причем здесь "оператор"?


АТ>>Упрощенно выражаясь, тело функции на языках С или С++ состоит из инструкций (statements). Statements бывают разных видов. Один из самых распространенных — expression statement, то есть выражение. `value;` — это вполне легальный expression statement.


Pzz>Оператор — это и есть statement. Так уж наши переводчики придумали, еще в советские времена.


Это пусть останется на их совести. Я видел попытки использовать слово "инструкция" в качестве перевода для "statement". Тоже не очень хороший вариант...

Pzz>И да, действительно, в си нет оператора присваивания, зато есть оператор — выражение.


А это откуда? С каких это пор в С нет оператора присваивания???
Best regards,
Андрей Тарасевич
Re[6]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.22 16:47
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

Pzz>>И да, действительно, в си нет оператора присваивания, зато есть оператор — выражение.


АТ>А это откуда? С каких это пор в С нет оператора присваивания???


С таких.

i = 5;


Это — выражение. У него даже значение есть. И ничем, синтаксически, не отличается от любого выражения;

foo (i = 5);
i + 5;


Вполне корректный код на Си. В первой строке i присваивается 5, и результат (т.е., 5) передается функции foo. Кстати, в C++ оператор = может быть перегружен, и результат может быть какой-нибудь другой, не 5. Но обычно так не делают, из человеколюбия.

Во второй строке вычисляется сумма i и 5, и с результатом ничего не делается. Синтаксически это корректно, хоть и бессмысленно.

И да, по-русски в контексте C++ два разных слова переводятся, как оператор: operator и statement.
Re[7]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 08.05.22 23:19
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Андрей Тарасевич, Вы писали:


Pzz>>>И да, действительно, в си нет оператора присваивания, зато есть оператор — выражение.


АТ>>А это откуда? С каких это пор в С нет оператора присваивания???


Pzz>С таких.


Pzz>
Pzz>i = 5;
Pzz>


Pzz>Это — выражение. У него даже значение есть. И ничем, синтаксически, не отличается от любого выражения;


И что? Это действительно выражение. Оно использует оператор присваивания.

Но с чего бы это вдруг тот факт, что это является выражением, каким-то образом свидетельствует о том, что "в С нет оператора присваивания"?

Pzz>
Pzz>foo (i = 5);
Pzz>i + 5;
Pzz>


Pzz>Вполне корректный код на Си. В первой строке i присваивается 5, и результат (т.е., 5) передается функции foo.


Это прекрасно. Но к чему здесь эти банальности? Вопрос по-прежнему тот же: с чего это вдруг вы заявляете, что в С "нет оператора присваивания"? Какое отношение вышеприведенные примеры имеют к ответу на этот вопрос?
Best regards,
Андрей Тарасевич
Re[8]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.22 23:24
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Это прекрасно. Но к чему здесь эти банальности? Вопрос по-прежнему тот же: с чего это вдруг вы заявляете, что в С "нет оператора присваивания"? Какое отношение вышеприведенные примеры имеют к ответу на этот вопрос?


В C нет assignment statement. Есть expression statement.

Assignment operator в C есть.

Если это терминологический спор, я считаю, он исчерпан. Иначе не понимаю, о чем мы спорим.
Re[9]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 09.05.22 17:00
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>Это прекрасно. Но к чему здесь эти банальности? Вопрос по-прежнему тот же: с чего это вдруг вы заявляете, что в С "нет оператора присваивания"? Какое отношение вышеприведенные примеры имеют к ответу на этот вопрос?


Pzz>В C нет assignment statement. Есть expression statement.


Pzz>Assignment operator в C есть.


Pzz>Если это терминологический спор, я считаю, он исчерпан. Иначе не понимаю, о чем мы спорим.


Это я не понимаю. Потому и задаю вопросы, пытаясь это выяснить.

Вы, очевидно, пытаетесь настаивать на том, что термин "оператор" должен означать именно и только "statement", и на этом строите последующие [странные и сенсационные] заявления вроде "в С нет оператора присваивания". Зачем? Не ясно.

Ответ: нет. Термин "оператор" означает именно "operator". Если в каких то источниках еще пытаются применять этот термин для обозначения "statement", то либо сами разбирайтесь по контексту, где это "operator", а где это "statement", либо сразу отправляйте такие источники в мусорное ведро. В любом случае, использовать эту терминологическую кашу для оправдания феерически сенсационных заявлений, вроде "в С нет оператора присваивания", не приемлемо.
Best regards,
Андрей Тарасевич
Re[10]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.05.22 17:21
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Ответ: нет. Термин "оператор" означает именно "operator". Если в каких то источниках еще пытаются применять этот термин для обозначения "statement", то либо сами разбирайтесь по контексту, где это "operator", а где это "statement", либо сразу отправляйте такие источники в мусорное ведро. В любом случае, использовать эту терминологическую кашу для оправдания феерически сенсационных заявлений, вроде "в С нет оператора присваивания", не приемлемо.


Интересно, а каким же словом в православных источниках принято называть "statement", раз уж теперь слово "оператор" изменило значение?
Re[11]: Забавно
От: Андрей Тарасевич Беларусь  
Дата: 09.05.22 21:27
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Андрей Тарасевич, Вы писали:


АТ>>Ответ: нет. Термин "оператор" означает именно "operator". Если в каких то источниках еще пытаются применять этот термин для обозначения "statement", то либо сами разбирайтесь по контексту, где это "operator", а где это "statement", либо сразу отправляйте такие источники в мусорное ведро. В любом случае, использовать эту терминологическую кашу для оправдания феерически сенсационных заявлений, вроде "в С нет оператора присваивания", не приемлемо.


Pzz>Интересно, а каким же словом в православных источниках принято называть "statement", раз уж теперь слово "оператор" изменило значение?


Во-первых, в тех "православных источниках", которые используют слово "оператор" для обозначения "statement", это же слово "оператор" одновременно используется и в значении "operator". Как я сказал выше, что именно имеется в виду в каждом конкретном случае приходится выяснить из контекста. При этом не существует и никогда не существовало никаких "православных источников", в которых бы слово "оператор" было бы эксклюзивно привязано к значению "statement". Поэтому меня и удивили такие загадочные и феерически бессмысленные ваши заявления как "в языке С нет оператора присваивания". И я тут же вступил в разговор, чтобы отменить эти ваши заявления. Что и сделал.

Во-вторых, я кажется ясно дал понять выше, что практика перевода термина "statement" как "оператор" является неприемлемой, а также напомнил о существовании такого варианта перевода, как "инструкция". (Это тоже не самый идеальный вариант перевода для "statement", но намного лучше, чем неоднозначное "оператор"). После того, как я сделал это утверждение (а я делал его и раньше) никаких источников, переводящих "statement" как "оператор", нет и быть не может. А кто там что накорябал в некоей потешной макулатуре, большого значения никогда не имело.
Best regards,
Андрей Тарасевич
Re[12]: Забавно
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.05.22 21:39
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

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


Александр Григорьевич, перелогиньтесь.
Re[4]: Забавно
От: σ  
Дата: 09.05.22 23:28
Оценка:
m11>>value; это разве оператор? Еще с древних паскальских времен тут вроде должна быть ошибка типа "необходим оператор" а с++ оно вон какое.

AD>Это просто чтение значение переменной. После это значение не используется и просто теряется.


Нет там никакого чтения. [expr.context]/2:
> The lvalue-to-rvalue conversion is applied if and only if the expression is a glvalue of volatile-qualified type and …
Re[3]: Забавно
От: B0FEE664  
Дата: 11.05.22 15:28
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Программа вообще не имеет наблюдаемого поведения, значит все сразу будет выкинуто.

Наблюдаемое поведение: результат 0.
И каждый день — без права на ошибку...
Re[6]: Забавно
От: ути-пути Россия  
Дата: 13.05.22 04:43
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>2. Не будет переупорядочивания последовательности обращений к volatile


Вот тут есть сомнения, volatile — это не барьер, может компилятор и не будет этого делать, но и инструкцию с барьером он тоже не обязан добавлять, так что процессор вполне может и сам это сделать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[7]: Забавно
От: ArtDenis Россия  
Дата: 13.05.22 08:08
Оценка:
Здравствуйте, ути-пути, Вы писали:

AD>>2. Не будет переупорядочивания последовательности обращений к volatile


УП>Вот тут есть сомнения, volatile — это не барьер, может компилятор и не будет этого делать, но и инструкцию с барьером он тоже не обязан добавлять, так что процессор вполне может и сам это сделать.


Это лишь означает, что если в потоке исполнения сначала стоит чтение volatile, а затем запись volatile, то оптимизатор не может выдать код, который сначала записывает, а потом читает, иначе, например, сломается работа с устройствами через шину памяти. При этом без volatile чтение и запись может переупорядочиваться как угодно для удобства оптимизации, а так же не выполняться вообще.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[5]: Забавно
От: Michael7 Россия  
Дата: 14.05.22 07:06
Оценка: 12 (1)
Здравствуйте, Muxa, Вы писали:

m11>>Всегда можна усложнить


M>Или упростить:

M>
M>int main;
M>


И еще упростить

main;
Re[6]: Забавно
От: Michael7 Россия  
Дата: 14.05.22 07:08
Оценка:
Здравствуйте, Pzz, Вы писали:



M>>Или упростить:

M>>
M>>int main;
M>>


Pzz>И что, такое до сих пор компилируется?


Ага. Даже указание int перед main уже лишнее.
Так что

main;


тоже компилируется
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.