Ну, в C ++ две формы эквивалентны, и они обе объявляют функцию, которая не принимает аргументов. Если вы попытаетесь вызвать функцию и передать аргумент, компиляция выдаст ошибку.
С другой стороны, C и Objective-C оба по-разному относятся к двум формам. В этих языках первая форма объявляет функцию, которая принимает неизвестное число аргументов, тогда как вторая форма объявляет функцию, которая вообще не принимает аргументов. Итак, в C действует следующий код:
int foo() {
return 5;
}
int main() {
return foo(1, 2, 3);
}
Компилятор не жалуется, и код работает нормально (компилятор C ++ выдаст ошибку в этом же коде).
Обычно в C и Objective-C вы хотите использовать вторую форму и включить явный void, чтобы указать, что функция не должна принимать аргументов. Однако в C ++ чаще используется первая форма, потому что она эквивалентна и короче.