В чем разница между основным в C & C ++ - PullRequest
3 голосов
/ 02 августа 2011

В чем разница между main в программе на C и в программе на C ++?

Кроме

  1. оператор возврата (по умолчанию 1 в C, `0 в C ++)
  2. синтаксис:

    int main() { /* … */ }
    int main(int argc, char* argv[]) { /* … */ }
    int main() ,  void main() ,etc ...     
    

В основном:

  1. разница между основными в программах C и C ++

  2. Есть ли различия между C ++ 98, C ++ 03 и C ++ 0x в соответствии со стандартом ISO?т.е. точка входа в программу (реализация запуска программы) и т. д.

Ответы [ 4 ]

10 голосов
/ 02 августа 2011

В современном C и современном C ++:

  • main всегда либо int main(), либо int main(int, char*[]).
  • В C89 вы должны явно return из основного.
  • В C99 и C ++, если вы не возвращаете явно, вы неявно return 0.

[ (Сейчас я проверил стандарт C99 и отредактировал этот параграф.) ] Для вашего второго вопроса, в C99 у вас должна быть точно одна из двух main функций. В C ++ стандарт говорит, что программа хорошо сформирована, если она имеет функцию main, которая возвращает int, и что каждая соответствующая реализация должна принять две перечисленные версии в качестве точки входа (для «размещенной программы», например не для ядра Linux); см. 3.6.1. [/ edit] Насколько мне известно, соглашения о вызовах также не являются частью стандарта.

Я не понимаю вашего вопроса о памяти, но учтите, что ни в C99, ни в C ++ 03 нет ничего, кроме элементарной модели памяти, тогда как новый C ++ 0x явно добавляет модель памяти, чтобы обеспечить определены параллельные и атомарные операции.

8 голосов
/ 02 августа 2011

В C, в отличие от C ++, main можно вызывать рекурсивно.

/* valid C */
#include <stdio.h>
int main(int argc, char **argv) {
  putchar(argc ? '.' : '\n');
  if (argc == 0) return 0;
  return main(argc - 1, NULL);
}
1 голос
/ 02 августа 2011

Редактировать: Есть ли разница в реализации запуска программы, есть ли разница в c ++ 98, C ++ 03, C +++ 0x main и т. Д .........

Не в main. Тем не менее, существует огромная разница в том, что происходит до вызова main в C по сравнению с C ++. В C ++ объекты с static хранилищем обычно инициализируются до ввода main.

Примечание:
Реализация может выполнять динамическую инициализацию статических данных в середине main, но она должна делать это до первой ссылки на эти статические данные. Я никогда не сталкивался с реализацией, которая использует преимущества этой гибкости.

1 голос
/ 02 августа 2011

C99 и C ++ помещены в строку для определения main в размещенных средах.Разрешены два функциональных интерфейса:

int main(void);
int main(int, char*[]);

Оба языка допускают неявный возврат из main без оператора return, и в этом случае вызывающему возвращается возвращаемое значение EXIT_SUCCESS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...