С тех пор, как я понял много лет назад, что это не приводит к ошибке по умолчанию (по крайней мере, в GCC), я всегда задавался вопросом, почему?
Я понимаю, что вы можете использовать флаги компилятора для выдачи предупреждения, но разве это не должно быть ошибкой? Почему имеет смысл, если не пустая функция не возвращает значение, чтобы быть действительным?
Пример по запросу в комментариях:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... компилирует.