> Что только люде не делают, чтобы не изучайть по-нормальному божественный язык С
> (которому только и надо что отказаться от препроцессора и некоторых других
> небольшого числа неоднозначных возможностей, как это сделано в Misra C).Ну, понимаешь, у божества так то тоже свои приколы есть.
1) А кто такое int и сколько в нем битов? А, получив vuln в репу в чужом коде узнаем? Особенно если у вон той платформы проц не х86? Вон на абдурине int может и 16 битов быть. А чо, стандарт позволяет. Сколько кода при этом сглючит? Чуть менее чем весть?
2) За integer promition кого-то надо было бы немного убить. Потому что иногда делает крайне контринтуитивные вещи. А если ты думаешь что крут, попробуй -Wconversion в гцц и шланге, узнаешь много нового о своем коде и проблемах в нем.
3) Какой у enum вообще целочисленный тип? Ах, unspecified? Отлично. Ох, #define имеет свое мнение об int'ах, отличное от? А (1 << 31) может сделать не то о чем вы подумали? Ага, 1 и 1U две большие разницы. Удобно, б...
4) Пункт 2) ведет к совершенно идиотским выходкам программистов, не желающих греть мозги этим факапом. И вот уже прогер пишет ... array[index]... - и оказывается что index мало того что int, так еще в функцию снаружи caller'ом отдается, и это вообще ни верифицируется толком, зато когда caller делает что-то странное, оно такие интересные адреса потом дереференсит...
5) Язык местами недостаточно аннотирован для статического анализа. Операции с указателями вообще проверкам плохо поддаются. Иногда это неизбежность но 90% случаев можно заткнуть. Прошареные сишники делают эрзац этого как умеют, но почему бы не сделать это нормально?
6) Макросня в сях может вас поиметь. Нет, она реально может вас поиметь. Поэтому макросы у прошареных сишников состоят из скобок чуть менее чем полностью. А кто хочет элегантный код, получает потом вулны в репу.
7) Ну, блин, ок, как вы эффективно возвращаете несколько значений из функции? А чтоб это намерение еще и анализерам нормально задекларить? Не, вон тот void func (ptr* param) это нихрена не аннотация чего вы хотели сделать. Он вообще void возвращает. И errno так то тоже - хак.
А MISRA так то да, но некоторые вещи там довольно забавные или спорные. Есть еще с полдюжины стандартов, от CERT до Embedded C. В силу условности стандартов это компилеры не чекают как есть, разве что внешние тулы.