История изменений
Исправление hateyoufeel, (текущая версия) :
Там ошибка зашита в логику
Не совсем. Из-за UB, компилятор вполне может превратить первый кусок кода ниже во второй. Это будет корректным преобразованием:
int deref1(int *p) {
int x = *p;
if(p == NULL)
return 0;
else
return x;
}
int deref2(int *p) {
if(p == NULL)
return 0;
else
return *p;
}
а при volatile у тебя после компиляции (даже в зависимости от архитектур) может скомпилироваться либо РАБОЧАЯ программа, либо НЕРАБОЧАЯ - чувствуешь разницу…?
Объявление переменных с модификатором volatile является частью логики программы, поскольку влияет на наблюдаемые побочные эффекты. Если у объекта должен быть volatile, но его нет, это так же ошибка в логике.
Не фантазируй, все что ты привел из стандарта, это описание volatile и с ним я не спорю, проблема в том что пересказывая стандарт ты излишне нафантазировал…
Вообще ни разу. Я на русский перевёл тебе то, что там написано. Можешь сам почитать и убедиться.
Мне от этого ни горячо не холодно, т.к. код компилируется под Реальные машины
Компилируется чем? Святым духом? Разработчики компиляторов руководствуются этими же самыми принципами и реализуют компиляторы согласно стандарту.
Вот это корень раздора и есть, считаю. Ты язык Си воспринимаешь как стандарт, а я как инструмент…
Ты можешь воспринимать язык Си как что угодно, это не играет никакой роли. Важно то, как воспринимают язык Си разработчики компиляторов, которыми ты компилируешь код. Пока ты не осознаешь этот факт и не начнёшь руководствоваться стандартом языка, ты так и будешь вслепую расставлять volatile пока твой код чудом не заработает.
Исправление hateyoufeel, :
Там ошибка зашита в логику
Не совсем. Из-за UB, компилятор вполне может превратить первый кусок кода ниже во второй. Это будет корректным преобразованием:
int deref1(int *p) {
int x = *p;
if(p == NULL)
return 0;
else
return x;
}
int deref2(int *p) {
if(p == NULL)
return 0;
else
return *p;
}
а при volatile у тебя после компиляции (даже в зависимости от архитектур) может скомпилироваться либо РАБОЧАЯ программа, либо НЕРАБОЧАЯ - чувствуешь разницу…?
Объявление переменных с модификатором volatile является частью логики программы. Если у объекта должен быть volatile, но его нет, это так же ошибка в логике.
Не фантазируй, все что ты привел из стандарта, это описание volatile и с ним я не спорю, проблема в том что пересказывая стандарт ты излишне нафантазировал…
Вообще ни разу. Я на русский перевёл тебе то, что там написано. Можешь сам почитать и убедиться.
Мне от этого ни горячо не холодно, т.к. код компилируется под Реальные машины
Компилируется чем? Святым духом? Разработчики компиляторов руководствуются этими же самыми принципами и реализуют компиляторы согласно стандарту.
Вот это корень раздора и есть, считаю. Ты язык Си воспринимаешь как стандарт, а я как инструмент…
Ты можешь воспринимать язык Си как что угодно, это не играет никакой роли. Важно то, как воспринимают язык Си разработчики компиляторов, которыми ты компилируешь код. Пока ты не осознаешь этот факт и не начнёшь руководствоваться стандартом языка, ты так и будешь вслепую расставлять volatile пока твой код чудом не заработает.
Исходная версия hateyoufeel, :
Там ошибка зашита в логику
Не совсем. Из-за UB, компилятор вполне может превратить первый кусок кода ниже во второй. Это будет корректным преобразованием:
int deref1(int *p) {
int x = *p;
if(p == NULL)
return 0;
else
return x;
}
int deref2(int *p) {
if(p == NULL)
return 0;
else
return *p;
}
а при volatile у тебя после компиляции (даже в зависимости от архитектур) может скомпилироваться либо РАБОЧАЯ программа, либо НЕРАБОЧАЯ - чувствуешь разницу…?
Объявление переменных с модификатором volatile является частью логики программы. Если у объекта должен быть volatile, но его нет, это так же ошибка в логике.
Не фантазируй, все что ты привел из стандарта, это описание volatile и с ним я не спорю, проблема в том что пересказывая стандарт ты излишне нафантазировал…
Вообще ни разу. Я на русский перевёл тебе то, что там написано. Можешь сам почитать и убедиться.
Мне от этого ни горячо не холодно, т.к. код компилируется под Реальные машины
Компилируется чем? Святым духом? Разработчики компиляторов руководствуются этими же самыми принципами и реализуют компиляторы согласно стандарту.
Вот это корень раздора и есть, считаю. Ты язык Си воспринимаешь как стандарт, а я как инструмент…
Ты можешь воспринимать язык Си как что угодно, это не играет никакой роли. Важно то, как воспринимают язык Си разработчики компиляторов, которыми ты компилируешь код. Пока ты не осознаешь этот факт и не начнёшь руководствоваться стандартом, ты так и будешь вслепую расставлять volatile пока твой код чудом не заработает.