Про стандарти

На цьо­му сві­ті є бага­то недо­ціль­них речей. Іно­ді вони дово­лі логі­чні, зва­жа­ю­чи на обста­ви­ни, і їх можна стер­пі­ти. Іно­ді вони бісять, аж через край хлю­пає.

Напри­клад, під­трим­ка 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'и. З ними будь-який код пере­тво­рю­є­ться на лапшу.

Мітки: , ,

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.