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

Почему для объявления функций порядок не имеет значения? - C++

Войти
Регистрация
Восстановить пароль
 
shynarG
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 8
01.09.2015, 08:33     Почему для объявления функций порядок не имеет значения? #1
Добрый день! Вот никак не могу понять почему порядок объявлений функций не строгий, а если функции описывать до ф-и main(), то там последовательность описания функции строгая?

С объявлением функций, имеет такой вид:
Код
#include <iostream>
#include <iomanip>
using namespace std; 

void func1();
void func2();


int main()

{   
	func1();
}

void func1()
{
	cout << "Function #1";
	func2();
}

void func2()
{
 	cout << " Function #2";
}

а если так, не распознает func2 (ну это является логичным, потому что он еще не описан):

Код
#include <iostream>
#include <iomanip>
using namespace std; 

void func1()
{
	cout << "Function #1";
	func2();
}

void func2()
{
 	cout << " Function #2";
}


int main()

{ 
	func1();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2015, 08:33     Почему для объявления функций порядок не имеет значения?
Посмотрите здесь:

Порядок объявления библиотек? C++
есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? C++
C++ Где выделяется память для возвращаемого значения функций?
Порядок написания функций C++
Все виды(способы) объявления переменных, функций, классов, типов и т.п. на С++ C++
Порядок выполнения функций C++
C++ Порядок подстановки функций в ostream выводе
C++ Порядок работы функций
Порядок объявления функций C++
C++ Linux порядок вызова виртуальных функций
Почему у меня для использования функций cstring не нужно включать прототип библиотеки C++
C++ Builder Порядок выполнения функций

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6787 / 3998 / 917
Регистрация: 30.01.2014
Сообщений: 6,819
01.09.2015, 09:00     Почему для объявления функций порядок не имеет значения? #2
Цитата Сообщение от shynarG Посмотреть сообщение
ну это является логичным, потому что он еще не описан
Разве это не ответ на твой вопрос?
Чтобы что-то использовать, компилятору нужно видеть объявление.
В первом варианте объявление f2() видно из f1(), а во втором - нет.

Добавлено через 1 минуту
Уточню, что объявления достаточно, чтобы совершить связывание (есть имя, значит можно вызывать). Фактическое местоположение тела функции при этом уже не играет роли. Потому что поиск его и связывание с именем - это уже забота линкера, а не компилятора.
shynarG
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 8
01.09.2015, 09:17  [ТС]     Почему для объявления функций порядок не имеет значения? #3
я не могу понять почему для объявлений функций порядок не имеет значение. И как понять объявление f2() видно из f1() из кода

Код
void func1();
void func2();
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1945 / 1741 / 610
Регистрация: 14.05.2014
Сообщений: 5,047
Записей в блоге: 1
Завершенные тесты: 5
01.09.2015, 09:31     Почему для объявления функций порядок не имеет значения? #4
Цитата Сообщение от shynarG Посмотреть сообщение
я не могу понять почему для объявлений функций порядок не имеет значение.
потому что это всего лишь объявление, т.е. указание компилятору, что такая-то функция имеет такой-то тип возвращаемого значения и столько-то параметров с такими-то типами.
DrOffset
6787 / 3998 / 917
Регистрация: 30.01.2014
Сообщений: 6,819
01.09.2015, 11:15     Почему для объявления функций порядок не имеет значения? #5
Цитата Сообщение от shynarG Посмотреть сообщение
И как понять объявление f2() видно из f1() из кода
Понять просто: если до момента определения тела функции у тебя уже было выше объявление, то все будет работать.
Если объявления не было, то работать не будет.
На момент использования должно быть видно (расположено выше по тексту) объявление.
Yandex
Объявления
01.09.2015, 11:15     Почему для объявления функций порядок не имеет значения?
Ответ Создать тему
Опции темы

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