В языке C если ничего не стоит, значит там подразумевается int. При этом функция может ничего не возвращать, а может и вернуть целое число. Такое поведение изначально было заложено в язык - когда void в C ещё не было.
Потом появился C++ - в котором C немного причесали и явно разделили случаи "возвращаем необъявленный int" и "ничего не возвращаем" - добавив void. После чего void переехал из C++ в C.
И не стоит забывать про тип void* - для которого тоже нужно слово void.
P.S. В примере Def это абсолютно корректный прототип.
P.P.S. Если ты возьмёшь первое издание K&R (за много лет до C++) и сравнишь со вторым (современный C), увидишь несколько радикальных отличий в языке, вызванных заимствованием синтаксиса из C++.
C/C++
Зачем программе нужен этот void? Если можно просто,ни чего,ни ставить тогда.
Для единообразия. Можно было бы написать транслятор так, что бы void был не нужен, но разработчики уже так придумали (неспроста, кстати), а вам, и всем, приходится подчиняться.
Чтобы знать что это именно void.
Например, чтобы разрулить неоднозначность в такой ситуации:
#include
my_function(); // Это прототип или вызов?
...
int main() {
...
Как-минимум, потому что методы с одинаковой сигнатурой повышают читабельность кода.
то что у Def это какой-то бред. Например для прототипа явно не хватает типа возврата и да это откомпилируется, но как минимум должно выдать ошибку warning: data definition has no type or storage class - это во-первых, а во-вторых: когда это у нас в Си стало возможным вызывать функции в глобал скоупе?
простой пример у нас есть файл a.c:
Все пройдет хорошо и вывалиться ексешник. При запуске даже ответ номальный. Но если убрать прототип или хотя бы возвращаемый тип то начнут валиться ошибки, а если оставить прототип и вместо двух поставить "a", то нас уже предупредят warning: passing argument 1 of 'aaa' makes integer from pointer without a cast
и
простой пример у нас есть файл a.c:
int aaa(int a, int b) {
return a+b;
}
и файл main.c #include
int aaa(int, int); // прототип
int main(void) {
printf("%d", aaa(2,5)); // вызов
return 0;
}
теперь компилим все это: gcc -std=c99 -Wall -Wextra -o main.exe main.c a.cВсе пройдет хорошо и вывалиться ексешник. При запуске даже ответ номальный. Но если убрать прототип или хотя бы возвращаемый тип то начнут валиться ошибки, а если оставить прототип и вместо двух поставить "a", то нас уже предупредят warning: passing argument 1 of 'aaa' makes integer from pointer without a cast
и
Похожие вопросы
- Зачем нужно писать int около main(), return 0, void main в c++?
- Задача по c++ на векторы. Часть программы написана. Нужны правки.
- Написать программу на языке С(просто С).
- Задача по C++(сделать через void)
- Написать программу на языке Си
- Некорректно работает написанная программа
- Написать программу на с++
- Помогите написать программу на С++
- Написать программы на СИ
- Информатика нужна программа