Это относится только к прикладному ПО, запускаемому под операционной системой.
Нет, это относится к языку Си. Совершенно не важно, на какой платформе будет запускаться программа. Стандартизация языка как раз для этого и сделана. Под каждую платформу свой компилятор, а язык один. В идеале вот просто совсем один и тот же, без каких-либо отклонений.
А полностью следовать стандартам здесь смысла нет - системный код по определению непереносим.
По какому такому определению? Системное ПО в огромном количестве пишется на Си и Си++, и именно в этих языках все нормы и правила призывают к написанию как можно более переносимого кода. А тут вдруг заявляется, что он не переносим...
Скажите мне ну куда вы будете возвращать тип int (да и любой другой) при работе на голом железе???
Что-то мне подсказывает, что программа для микроконтроллера вообще навечно зациклена и до возврата доходит в эпизодических случаях. Можно хоть слонов возвращать, хоть космические корабли. А потом, это сегодня некуда возвращать, а завтра ардуинка выпустит что-нить новенькое и уже будет куда. Будем все программы переписывать?
А компилятор скорее всего создаст локальную переменную типа int, что для мелких контроллеров вполне себе ощутимо.
Пути компиляторов неисповедимы. Но вообще философия Си и Си++ в максимальной эффективности. Если ваш компилятор создаёт какие-то ненужные переменные без крайней необходимости, то он как бы эту философию нарушает.
ПС. Что я хочу всем этим сказать? Писать нужно на стандартном языке, по возможности без отклонений. Есть ли в этом смысл, нет ли - это должно волновать в последнюю очередь.