Существует ли различие между нечто (пусто) и нечто () в C++ или C?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

243
задан Kirill Kobelev 13 January 2017 в 13:12
поделиться

3 ответа

В [1 117] C:

  • void foo() означает "функцию foo, взятие неуказанного количества аргументов неуказанного типа"
  • void foo(void) означает "функцию foo взятие никаких аргументов"

В [1 118] C++ :

  • void foo() означает "функцию foo, взятие никаких аргументов"
  • void foo(void) означает "функцию foo взятие никаких аргументов"

Путем записи foo(void), поэтому, мы достигаем той же интерпретации через оба языка и делаем наши заголовки многоязычными (хотя мы обычно должны делать еще некоторые вещи к заголовкам для создания их действительно межъязыковыми; а именно, оберните их в extern "C", если мы компилируем C++).

305
ответ дан Jonathan Leffler 23 November 2019 в 03:10
поделиться

Я понимаю, что Ваш вопрос принадлежит C++, но когда дело доходит до C ответ может быть найден в K& R, страницы 72-73:

, Кроме того, если объявление функции не включает аргументы, как в

double atof();

, который также взят, чтобы означать, что ничто не должно быть принято об аргументах atof; вся проверка параметра выключена. Это особое значение списка пустого аргумента предназначается, чтобы разрешить более старым программам C компилировать с новыми компиляторами. Но это - плохая идея использовать его с новыми программами. Если функция берет аргументы, объявите их; если это не берет аргументов, используйте пусто.

37
ответ дан Pasha 23 November 2019 в 03:10
поделиться

В C Вы используете пустоту в пустой ссылке на функцию так, чтобы компилятор имел прототип, и тот прототип не имеет "никаких аргументов". В C++ Вы не должны говорить компилятору, что у Вас есть прототип, потому что Вы не можете не учесть прототип.

2
ответ дан Adam Tyszecki 23 November 2019 в 03:10
поделиться