Форум программистов, компьютерный форум CyberForum.ru

разница в местоположении функции - C++

Восстановить пароль Регистрация
 
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
07.09.2010, 19:55     разница в местоположении функции #1
есть ли разница где писать, в начале или в конце кода?
например:
C++
1
2
3
4
5
6
7
8
9
10
#include <blabla>
int a(int b, int c)
{
blabla
}
int main()
{
int a, b;
int a(a,b);
}
а вот в конце, не уверен что так..
C++
1
2
3
4
5
6
7
8
9
10
11
#include <blabla>
int a()
int main()
{
int a, b;
int a(a,b);
}
int a(int b, int c)
{
blabla
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2010, 19:55     разница в местоположении функции
Посмотрите здесь:

[C++]Разница циклов for и while. C++
C++ Какая разница?!
разница с и с++ C++
C++ Разница между 0 и 00 ?
Есть ли разница в каком порядке объвлены функции? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
radiohobbyt
 Аватар для radiohobbyt
192 / 190 / 4
Регистрация: 27.01.2009
Сообщений: 548
07.09.2010, 19:58     разница в местоположении функции #2
C
1
2
3
4
5
6
7
8
9
10
11
#include <blabla>
int a(int, int);
int main()
{
int a, b;
int a(a,b);
}
int a(int b, int c)
{
blabla
}
никакой. все для удобства.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
07.09.2010, 22:42     разница в местоположении функции #3
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
есть ли разница где писать, в начале или в конце кода?
например:
в вашем случае - без разницы, все-равно никакт работать не будет
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
08.09.2010, 18:09  [ТС]     разница в местоположении функции #4
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
не уверен что так..
поправьте как правильно
rrrFer
Заблокирован
08.09.2010, 18:16     разница в местоположении функции #5
radiohobbyt,
C++
1
int a(a,b);//как так-то? :)
Impuls1989
 Аватар для Impuls1989
6 / 6 / 0
Регистрация: 08.09.2010
Сообщений: 35
08.09.2010, 18:52     разница в местоположении функции #6
Исторически сложилось так, что сверху пишутся прототипы функций, а снизу их реализация. Не знаю как Вам, а мне приятнее видеть только названия функций сверху, и не мозолить себе глаза километрами бесполезного мне кода.
Объясню почему так сложилось.
Знаете ли Вы что делает #include <какой-нибудь хэдэр>? По сути когда вы нажмете на кнопку "скомпилировать" вместо инклуда подставятся все прототипы, которые в нем были записаны (что собственно и делает описание прототипа в варианте 2). С другой стороны, никто не запрещает Вам написать в хэдэре реализацию всей функции (вариант 1). Так что если делать все по уму, то наверное правильнее вариант № 2. Но опять таки повторюсь: все зависит от того, насколько вы хотите поиздеваться над человеком, который будет сопровождать Вашу программу.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.09.2010, 04:15     разница в местоположении функции #7
на самом деле, когда прототипы уже есть, их не нужно делать потом (когда начинается перенос функций в другие файлы) и, в то же время, их можно сразу взять и перенести в соответствующий хедер

вот, а плюс написания функций сверху - это, когда файл открывается, то он сразу отматывается в конец и мы сразу видим main(), и не нужно мотать к ней; когда же функции внизу, то открывается последняя функция, то есть нужно мотать наверх, к main()
это без учёта статических функций, которые у меня снизу написать не получается, их прототипы не видят их
Impuls1989
 Аватар для Impuls1989
6 / 6 / 0
Регистрация: 08.09.2010
Сообщений: 35
09.09.2010, 10:35     разница в местоположении функции #8
Цитата Сообщение от accept Посмотреть сообщение
это без учёта статических функций, которые у меня снизу написать не получается, их прототипы не видят их
А можно поподробнее? Я что-то ни разу не видел такого, что прототип не видит функцию. Можно маленький пример?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.09.2010, 01:57     разница в местоположении функции #9
раньше не получалось, теперь нормально
раньше я юзал gcc, там не получалось сделать, в результате я стал всегда писать статические функции перед вызовами, но было это года два назад, а сейчас у меня gcc новый
C
1
2
3
4
5
6
7
8
9
10
11
12
static void f(void);
 
int main(void)
{
    f();
    return 0;
}
 
static void f(void)
{
    ;
}
Добавлено через 14 часов 43 минуты
во, вспомнил
C
1
2
3
4
5
6
7
8
9
10
11
12
int main(void)
{
    static void f(void);
 
    f();
    return 0;
}
 
static void f(void)
{
    ;
}
Код
[guest@localhost tmp]$ gcc t.c -o t
t.c: В функции ‘main’:
t.c:4: ошибка: для функции ‘f’ задан неверный класс хранения
t.c: На верхнем уровне:
t.c:10: предупреждение: несовместимые типы для ‘f’
t.c:10: ошибка: static-декларация ‘f’ после неstatic-декларации
t.c:6: замечание: здесь была предыдущая неявная декларация ‘f’
[guest@localhost tmp]$
Impuls1989
 Аватар для Impuls1989
6 / 6 / 0
Регистрация: 08.09.2010
Сообщений: 35
10.09.2010, 11:37     разница в местоположении функции #10
Ну так весьма логично. Это ведь разные уровни видимости. Все, что реализовано в фигурных скобках не должно быть видно за их пределами...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2010, 15:35     разница в местоположении функции
Еще ссылки по теме:

C++ Разница между != и <=
C++ Функции str.size() и str.length() - в чем их разница?
Разница в работе созданной функции и основной функции C++

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
10.09.2010, 15:35     разница в местоположении функции #11
Цитата Сообщение от Impuls1989 Посмотреть сообщение
Ну так весьма логично. Это ведь разные уровни видимости. Все, что реализовано в фигурных скобках не должно быть видно за их пределами...
Ну в принципе да.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void foo() {
    void bar();
    bar();
}
 
int main()
{ 
    //bar(); // ошибка
    void bar();
    bar();
}
 
void bar() {
}
Со статическими функциями так делать действительно нельзя, это связано с их свойствами. Так как статический для функций означает "виден на уровне глобальных переменных"
Yandex
Объявления
10.09.2010, 15:35     разница в местоположении функции
Ответ Создать тему
Опции темы

Текущее время: 12:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru