Про стандарти
На цьому світі є багато недоцільних речей. Іноді вони доволі логічні, зважаючи на обставини, і їх можна стерпіти. Іноді вони бісять, аж через край хлюпає.
Наприклад, підтримка C11 в компіляторах.
Припустимо, я пишу код, який хоче атомарні цілочисельні операції. Що я роблю в GCC 6.3? -std=c11, #include <stdatomic.h> — і вперед, до atomic_size_t.
Що я роблю в CentOS, де GCC 4.8? Скриплю, звісно, але додаю в CMake перевірку на цей хедер, і, якщо його нема, обгортаю size_t spinlock’ом.
Що я роблю в ICC? По ідеї, те саме — попри те, що задекларована підтримка C11, атомарних операцій там нема.
Але stdatomic.h є.
Intel, what? Я, звісно, вдячний за те, що другий рік користуюся безкоштовною ліцензією на компілятор, який дає змогу робити код набагато кращим, але чому я маю додавати ще пачку #ifdef’ів на __STDC_NO_ATOMICS__? Як можна декларувати stdatomic.h без атомарних типів?
Не люблю #ifdef’и. З ними будь-який код перетворюється на лапшу.