Во-первых, я должен сказать, что ваш код:
myFunction(int value){
.......
}
является функцией определение, кроме просто декларации. Чистая декларация будет как:
myFunction(int value);
или
myFunction(int); //also valid but less recommended due to bad readability
Также отметим, что каждое определение может служить объявление функции, но не наоборот.
Вернемся к вашему вопросу. myFunction(int value);
соответствует int myFunction(int value);
в соответствии с более ранними стандартами. Фактически, компиляторы будут считать все необъявленные функции возвратом int
, используя эти стандарты.
Однако прототип без типа не является объявлением функции с C99, хотя тип, скорее всего, все еще будет рассматриваться как int
компилятором.
В любом случае, это очень плохой стиль кодирования, и его следует избегать, поскольку проверка времени компиляции не может быть выполнена, и вы зависите от неопределенного поведения, которое никогда не заслуживает доверия. Если вам не нужно возвращать значение, вы можете просто написать:
void myFunction(int value);
Смотрите также: Are prototypes required for all functions in C89, C90 or C99?
В «старинные дни», которые по умолчанию будут «int». Не уверен, что это все еще правильная интерпретация ... – John3136
@ John3136 это было верно вплоть до C99. С тех пор он плохо сформировался. –
@ M.M Спасибо. Я подозревал, что это может быть неправильно. У меня возникло соблазн спросить «зачем кому-то все-таки это делать», но это не очень важно! – John3136