История изменений
Исправление shdown, (текущая версия) :
У тебя есть фича в стандарте, которая запрещает компилятору делать оптимизации
Нет. Это нигде не написано в стандарте.
Были случаи, когда
int mul2(volatile int *p)
{
    return *p + *p;
}
    mov (%rdi),%eax
    mov (%rdi),%eax
    shl $1,%eax
    ret
То что POSIX там что-то свое про volatile думает, это его проблемы.
А POSIX тут при чём? Есть стандарт Си. POSIX не может ему противоречить, если что. POSIX ничего дополнительно про volatile не говорит, ЕМНИП.
Сигналы, sig_atomic_t и гарантии на volatile sig_atomic_t есть в стандарте Си.
Исправление shdown, :
У тебя есть фича в стандарте, которая запрещает компилятору делать оптимизации
Нет. Это нигде не написано в стандарте.
Были случаи, когда
int mul2(volatile int *p)
{
    return *p + *p;
}
    mov (%rdi),%eax
    mov (%rdi),%eax
    shl $1,%eax
    ret
То что POSIX там что-то свое про volatile думает, это его проблемы.
А POSIX тут при чём? Есть стандарт Си. POSIX не может ему противоречить, если что. POSIX ничего дополнительно про volatile не говорит, ЕМНИП.
Исходная версия shdown, :
У тебя есть фича в стандарте, которая запрещает компилятору делать оптимизации
Нет. Это нигде не написано в стандарте.
Были случаи, когда
int mul2(volatile int *p)
{
    return *p + *p;
}
    mov (%rdi),%eax
    mov (%rdi),%eax
    shl $1,%eax
    ret
То что POSIX там что-то свое про volatile думает, это его проблемы.
А POSIX тут причём? Есть стандарт Си. POSIX не может ему противоречить, если что. POSIX ничего дополнительно про volatile не говорит, ЕМНИП.