История изменений
Исправление firkax, (текущая версия) :
Про C:
1. Притащили идиотизм с nullptr из C++C23.
2. enum-ы с заданным базовым типом оттуда же (хорошо).
3. Поддержка varargs без фиксированного аргумента и ещё что-то (вроде не мешает, но зачем оно нужно непонятно - функция как-то должна узнать что ей брать из varargs, а без хотя бы одного фиксированного аргумента это затруднительно).
4. Вывод типов (auto x = sin(1);
).
5. constexpr (норм, но в proposal-е смешное обоснование: типа без constexpr в const можно записать out-of-range значение и компилятор молча это примет а с constexpr нельзя).
6. Сомнительная фигня:
static struct foo* p = &(static struct foo) {1, 'a', 'b'};
Нововведение в том что инициализатор может быть анонимной переменной (из-за static), под которую выделена память, но у которой нет своего идентификатора. Плохо, только вносит путаницу. Так и до анонимных функций (которыми заполнены мусорные языки типа js) недалеко.
7. Слова (смысл понятен, расписывать не буду) typeof, typeof_unqual, alignas, alignof, bool, false, static_assert, thread_local, true, noreturn. Тут некоторая доля вранья, поскольку больше половины из них уже было, а теперь их типа заново внесли от имени С23.
8. Инициализация массивов и структур пустыми скобками (опять враньё, уже было с древних времён).
9. Макросы версий заголовочных файлов __STDC_VERSION_*_H__
10. Удалено ATOMIC_VAR_INIT (я и не знал что это такое).
11. Макрос «unreachable» в <stddef.h> (видимо для пометки соотв. мест кода).
12. Удалены триграфы (давно пора).
13. Больше нельзя делать прототипы функций с пустыми скобками вместо аргументов в качестве открытого списка аргументов (хорошо, но всякий древний до-С89 хлам сломается). Теперь пустые скобки считаются как (void) - а это уже плохо, провоцирует баги. Надо было просто запретить.
14. -Wformat умеет проверять %wN и %wfN для printf и scanf (лень искать что это, скорее всего какое-то ненужно).
15. Какая-то муть с юникодом и смайликами в идентификаторах, не разобрался в чём суть https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
16. -Wenum-int-mismatch для проверки соответствия базового типа enum и целочисленного типа в каких-то операциях.
Исправление firkax, :
Про C:
1. Притащили идиотизм с nullptr из C++C23.
2. enum-ы с заданным базовым типом оттуда же (хорошо).
3. Поддержка varargs без фиксированного аргумента и ещё что-то (вроде не мешает, но зачем оно нужно непонятно - функция как-то должна узнать что ей брать из varargs, а без хотя бы одного фиксированного аргумента это затруднительно).
4. Вывод типов (auto x = sin(1);
).
5. constexpr (норм, но в proposal-е смешное обоснование: типа без constexpr в const можно записать out-of-range значение и компилятор молча это примет а с constexpr нельзя).
6. Сомнительная фигня:
static struct foo* p = &(static struct foo) {1, 'a', 'b'};
Нововведение в том что инициализатор может быть анонимной переменной (из-за static), под которую выделена память, но у которой нет своего идентификатора. Плохо, только вносит путаницу. Так и до анонимных функций (которыми заполнены мусорные языки типа js) недалеко.
7. Слова (смысл понятен, расписывать не буду) typeof, typeof_unqual, alignas, alignof, bool, false, static_assert, thread_local, true, noreturn. Тут некоторая доля вранья, поскольку больше половины из них уже было, а теперь их типа заново внесли от имени С23.
8. Инициализация массивов и структур пустыми скобками (опять враньё, уже было с древних времён).
9. Максроы версий заголовочных файлов __STDC_VERSION_*_H__
10. Удалено ATOMIC_VAR_INIT (я и не знал что это такое).
11. Макрос «unreachable» в <stddef.h> (видимо для пометки соотв. мест кода).
12. Удалены триграфы (давно пора).
13. Больше нельзя делать прототипы функций с пустыми скобками вместо аргументов в качестве открытого списка аргументов (хорошо, но всякий древний до-С89 хлам сломается). Теперь пустые скобки считаются как (void) - а это уже плохо, провоцирует баги. Надо было просто запретить.
14. -Wformat умеет проверять %wN и %wfN для printf и scanf (лень искать что это, скорее всего какое-то ненужно).
15. Какая-то муть с юникодом и смайликами в идентификаторах, не разобрался в чём суть https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
16. -Wenum-int-mismatch для проверки соответствия базового типа enum и целочисленного типа в каких-то операциях.
Исправление firkax, :
Про C:
1. Притащили идиотизм с nullptr из C++C23.
2. enum-ы с заданным базовым типом оттуда же (хорошо).
3. Поддержка varargs без фиксированного аргумента и ещё что-то (вроде не мешает, но зачем оно нужно непонятно - функция как-то должна узнать что ей брать из varargs, а без хотя бы одного фиксированного аргумента это затруднительно).
4. Вывод типов.
5. constexpr (норм, но в proposal-е смешное обоснование: типа без constexpr в const можно записать out-of-range значение и компилятор молча это примет а с constexpr нельзя).
6. Сомнительная фигня:
static struct foo* p = &(static struct foo) {1, 'a', 'b'};
Нововведение в том что инициализатор может быть анонимной переменной (из-за static), под которую выделена память, но у которой нет своего идентификатора. Плохо, только вносит путаницу. Так и до анонимных функций (которыми заполнены мусорные языки типа js) недалеко.
7. Слова (смысл понятен, расписывать не буду) typeof, typeof_unqual, alignas, alignof, bool, false, static_assert, thread_local, true, noreturn. Тут некоторая доля вранья, поскольку больше половины из них уже было, а теперь их типа заново внесли от имени С23.
8. Инициализация массивов и структур пустыми скобками (опять враньё, уже было с древних времён).
9. Максроы версий заголовочных файлов __STDC_VERSION_*_H__
10. Удалено ATOMIC_VAR_INIT (я и не знал что это такое).
11. Макрос «unreachable» в <stddef.h> (видимо для пометки соотв. мест кода).
12. Удалены триграфы (давно пора).
13. Больше нельзя делать прототипы функций с пустыми скобками вместо аргументов в качестве открытого списка аргументов (хорошо, но всякий древний до-С89 хлам сломается). Теперь пустые скобки считаются как (void) - а это уже плохо, провоцирует баги. Надо было просто запретить.
14. -Wformat умеет проверять %wN и %wfN для printf и scanf (лень искать что это, скорее всего какое-то ненужно).
15. Какая-то муть с юникодом и смайликами в идентификаторах, не разобрался в чём суть https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
16. -Wenum-int-mismatch для проверки соответствия базового типа enum и целочисленного типа в каких-то операциях.
Исходная версия firkax, :
Про C:
1. Притащили идиотизм с nullptr из C23.
2. enum-ы с заданным базовым типом оттуда же (хорошо).
3. Поддержка varargs без фиксированного аргумента и ещё что-то (вроде не мешает, но зачем оно нужно непонятно - функция как-то должна узнать что ей брать из varargs, а без хотя бы одного фиксированного аргумента это затруднительно).
4. Вывод типов.
5. constexpr (норм, но в proposal-е смешное обоснование: типа без constexpr в const можно записать out-of-range значение и компилятор молча это примет а с constexpr нельзя).
6. Сомнительная фигня:
static struct foo* p = &(static struct foo) {1, 'a', 'b'};
Нововведение в том что инициализатор может быть анонимной переменной (из-за static), под которую выделена память, но у которой нет своего идентификатора. Плохо, только вносит путаницу. Так и до анонимных функций (которыми заполнены мусорные языки типа js) недалеко.
7. Слова (смысл понятен, расписывать не буду) typeof, typeof_unqual, alignas, alignof, bool, false, static_assert, thread_local, true, noreturn. Тут некоторая доля вранья, поскольку больше половины из них уже было, а теперь их типа заново внесли от имени С23.
8. Инициализация массивов и структур пустыми скобками (опять враньё, уже было с древних времён).
9. Максроы версий заголовочных файлов __STDC_VERSION_*_H__
10. Удалено ATOMIC_VAR_INIT (я и не знал что это такое).
11. Макрос «unreachable» в <stddef.h> (видимо для пометки соотв. мест кода).
12. Удалены триграфы (давно пора).
13. Больше нельзя делать прототипы функций с пустыми скобками вместо аргументов в качестве открытого списка аргументов (хорошо, но всякий древний до-С89 хлам сломается). Теперь пустые скобки считаются как (void) - а это уже плохо, провоцирует баги. Надо было просто запретить.
14. -Wformat умеет проверять %wN и %wfN для printf и scanf (лень искать что это, скорее всего какое-то ненужно).
15. Какая-то муть с юникодом и смайликами в идентификаторах, не разобрался в чём суть https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
16. -Wenum-int-mismatch для проверки соответствия базового типа enum и целочисленного типа в каких-то операциях.