A.Допустима ли следующая попытка определить точку входа 'main' автономной программы на C ++?
Нет.Стандарт C ++ гласит: «Программа должна содержать глобальную функцию с именем main
» (§3.6.1 / 1).В вашей программе функция main
не находится в глобальном пространстве имен;это в безымянном пространстве имен.
Неявная директива using позволяет искать и использовать только имена из безымянного пространства имен во вложенном пространстве имен;он не добавляет эти имена во вложенное пространство имен.В частности, «директива using using не добавляет никаких элементов в декларативную область, в которой она появляется» (§7.3.4 / 1).
Эта программа плохо работает?и почему?
Программа не обязательно плохо сформирована.Не существует правила против использования функции с именем main
в пространстве имен, отличном от глобального пространства имен;такая функция просто не является main
функцией.namespace { int main(); }
и int main()
- две разные функции, и правильно сформированная программа может иметь обе из них.
Обратите внимание, что если ваша программа не имеет функции main
в глобальном пространстве имен, тогдапрограмма не сформирована (поскольку, как указано выше, программа в размещенной среде должна иметь основную функцию).
B.Я прошел через обсуждения на EXIT_FAILURE
и EXIT_SUCCESS
, но не могу сделать вывод, что EXIT_SUCCESS
всегда должно быть 0
.
Нет требования, чтобы EXIT_SUCCESS
расширялся до 0
,Стандарт C просто говорит, что в <stdlib.h>
,
определены макросы: ... EXIT_FAILURE
и EXIT_SUCCESS
, которые расширяются до целочисленных константных выражений, которые можно использовать в качестве аргумента *Функция 1044 * для возврата статуса неудачного или успешного завершения, соответственно, в хост-среду (C99 §7.20 / 3).
(Поскольку эти два макроса определены в <cstdlib>
, стандарт C содержитспецификация для них).