Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22

Объявления функций До/После main(), файлы (*.cpp, *.h)

24.01.2018, 12:47. Показов 12176. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
В некоторых источниках пишут, что объявление функций после main() - признак хорошего тона. Хотя и нужно объявлять прототипы.
Хотел узнать Ваше мнение по этому вопросу.
Сам main() объявляю в конце кода из соображения экономии кода на прототипах.
Можно вынести функции и в отдельные файлы (*.cpp, *.h) - здесь тоже интересно Ваше мнение.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2018, 12:47
Ответы с готовыми решениями:

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include <iostream> #include <math.h> using namespace std; int main() {double a, b, x; ...

Разбить main.cpp на файлы
Есть вот такой main.cpp: #include <stdlib.h> #include <iostream> #include <string.h> //#include <stdint.h> //#include...

Main.cpp In file included from main.cpp
//class.cpp #include "class.h" Ticket::Ticket() { prise = 0; marshrut = "none"; time = "none"; ...

22
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
24.01.2018, 20:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
вот мне не понятно, как это?
объявление есть, а прототипом оно не является.

нужны примеры когда является.
и когда не является.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int foo(); /* Объявление. Не является прототипом */
 
int bar(a, b) /* Определение в стиле K&R. Включает в себя объявление, которое */
int a;        /* не является прототипом */
double b;
{
  return a + b;
}
 
int baz(int x, int y); /* Объявление. Является прототипом */
 
int main()
{
  foo(1, 2, 3); 
  /* Вызов функции, объявленной без прототипа. Ошибки компиляции нет. Типы и количество 
     аргументов подобраны правильно. Все в порядке */
 
  foo("Hello", "World");
  /* Вызов функции, объявленной без прототипа. Ошибки компиляции нет. Типы и количество 
     аргументов подобраны неправильно. Поведение не определено */
 
  bar(1, 5.);
  /* Вызов функции, объявленной без прототипа. Ошибки компиляции нет. Типы и количество 
     аргументов подобраны правильно. Все в порядке */
 
  bar(1, 2, 3, 4, 5, 6);
  /* Вызов функции, объявленной без прототипа. Ошибки компиляции нет (!), несмотря на то, 
     что K&R-определение как бы "намекает" на точное количество параметров у функции. 
     Типы и количество аргументов подобраны неправильно. Поведение не определено */
 
  baz(8., 3.14);
  /* Вызов функции, объявленной с прототипом. Ошибки компиляции нет. Типы аргументов неявно 
     приводятся к типам параметров. Все в порядке */
 
  baz(1, 2, 3);
  /* Вызов функции, объявленной с прототипом. Ошибка компиляции - неверное число аргументов */
}
 
int foo(int a, int b, int c)
{
  return a + b + c;
}
 
int baz(int x, int y)
{
   return x + y;
}
3
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
24.01.2018, 21:32
Цитата Сообщение от bedvit Посмотреть сообщение
не спора ради, а токма понимания для.
С тех пор, как появились роботы (а Транслятор - это по-простому говоря - Робот), все наши здесь рассуждения сводятся к тому, как бы нам понятнее объяснить этому роботу, чего мы от него хотим. Ну и про себя бы не забывать. Чтобы мы сами могли понять, чего мы хотим в самом деле. А поскольку наши желания часто меняются, как бы нам с ним (с роботом) не запутаться...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,405
25.01.2018, 07:52
Цитата Сообщение от bedvit Посмотреть сообщение
Правильно ли я понимаю, что и в Си и в С++ нужен прототип функции до точки входа, если функция "реализована" ниже точки входа (main() )? Исключений нет?
Не совсем правильно.

* В С++ всегда нужно (и всегда было нужно) объявлять функцию перед использованием. В С++ объявление функции всегда содержит указание количества и типов параметров (т.е. в терминах языка С, объявление функции в С++ всегда является прототипом).

* В "классическом" С (С89/90) объявлять функцию перед вызовом не обязательно вообще. В С начиная с С99 объявлять функцию перед вызовом обязательно, но это объявление не обязано быть прототипом.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2018, 07:52

Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
main.cpp #include <iostream> #include"Header.h" using namespace std; int main() { A ob; ob.f(); return...

Как передать переменные и массивы из main.cpp в mainwindow.cpp?
Как передать переменные и массивы из main.cpp в mainwindow.cpp? main.cpp #include "mainwindow.h" #include <QApplication> ...

Включение библиотек в main.cpp и my_func.cpp
Здравствуйте, Подскажите пожалуйста, ни как не могу понять, вот если: //main.cpp #include <iostream> int main() ...

Подключение файлов main.cpp some.cpp some.h
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как...

Вот: source_file.cpp: In function 'int main()': source_file.cpp:10:12: error: 'strlen' was not declared in this scope
#include<iostream> using namespace std; int main() { char a,b; int i,j; cout<<"Напишите слово:"; cin>>a; i=0; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru