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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
lacheti
Сообщений: n/a
#1

Чем отличается между собой объявление, инициализация и определение? - C++

27.08.2012, 12:57. Просмотров 3951. Ответов 5
Метки нет (Все метки)

То есть объявление может быть у переменной или функции и выглядеть к примеру так :
C++
1
int a; void func (int);
.Но выделяется ли на этом этапе память под них или когда это происходит?
Инициализация - это присваивание начального значения переменной, то есть
C++
1
a = 1;
А если инициализация происходит во время объявления
C++
1
int a  = 1
, то как это называется?
Определение - это к примеру описание функции, под которое ещё не выделяется память, то есть
C++
1
void func (int) { int b; }
, и выделяется в момент выполнения программы? Так ли это и если нет, то когда выделяется память?

P.S. Можно поподробней. А то от разных людей слышу разные версии, а в книге которую читал, об этом не очень упоминалось или я подзабыл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2012, 12:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чем отличается между собой объявление, инициализация и определение? (C++):

Чем отличается определение функции от прототипа? - C++
чем отличается определение функции от прототипа? и где писать определение?

из четырех числа а1,а2,а3, и а4 одно отличается от трех других, равных между собой; присвоить номер этого числа переменной n - C++
Известно, что из четырех числа а1,а2,а3, и а4 одно отличается от трех других, равных между собой; присвоить номер этого числа переменной n ...

Чем отличаются между собой 3 книги Шилдта по С++? - C++
Читаю сейчас его книгу "Руководство для начинающих", дальше хотел прочитать ещё его две книги "Базовый курс" и "Полный справочник". Но не...

Чем отличаються между собой книги Страуструпа - C++
Чем отличаються между собой книги Страуструпа и какую имеет смысл почитать после Лафоре и Прата или надо поискать что-то другое мне...

Сравнить массивы между собой и вывести массив, в котором больше разеых элементов, чем в других - C++
Доброго времени суток форумчане, помогите пожалуйста написать программу, есть 5 массивов одинаковой размерности, но с разным колличеством...

Напечатать все пары городов, связанных между собой не напрямую, но не более чем с одной пересадкой - C++
Помогите пожалуйста в C++ Сеть авиалиний, соединяющая города, задана матрицей связности M(k,k), где Mi(j = о, если города /, j не ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.08.2012, 13:05 #2
Если переменная глобальная или статическая, память под нее выделяется при запуске программы. Иначе выделяется при входе в фигурные скобки, в которых она объявляется.
Цитата Сообщение от lacheti Посмотреть сообщение
А если инициализация происходит во время объявления
Так и называется, объявление и инициализация. Или инициализации при объявлении.

Добавлено через 1 минуту
И про функции я не пойму - что подразумевается под выделением памяти.
1
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
27.08.2012, 13:10 #3
Цитата Сообщение от lacheti Посмотреть сообщение
Определение - это к примеру описание функции, под которое ещё не выделяется память, то есть
C++
1
void func (int) { int b; }
, и выделяется в момент выполнения программы? Так ли это и если нет, то когда выделяется память?
Под локальные переменные функции память выделяется в стеке в момент вызова функции. Под сам код функции, естессно, ещё при компиляции.
1
lacheti
Сообщений: n/a
27.08.2012, 13:19 #4
А если эти функции не используются в коде, то есть они используются в зависимости от того поступила ли из вне такая команда. То под такие неиспользуемые функции будет все ровно выделено место? Только под переменные не выделяется, если она не используется. А под что конкретно тогда выделяется при компиляции память под функции?
И что насчет значения слова "определение" в с++?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
27.08.2012, 13:25 #5
Цитата Сообщение от lacheti Посмотреть сообщение
А если эти функции не используются в коде, то есть они используются в зависимости от того поступила ли из вне такая команда. То под такие неиспользуемые функции будет все ровно выделено место? Только под переменные не выделяется, если она не используется. А под что конкретно тогда выделяется при компиляции память под функции?
И что насчет значения слова "определение" в с++?
Если функция не используется в коде, то это зависит от настроек компилятора. Он может её выкинуть, чтобы места не занимала, а может и скомпилировать на случай, если её будет вызывать кто-то другой, а не вы. В библиотеках же тоже не все функции используются самой библиотекой, но их нельзя выкидывать. Поэтому скорее всего скомпилирует.

Память выделяется под код. Действия, которые выполняет функция, тоже ведь надо где-то хранить. Только память выделяется не лично под код этой функции, а под всю программу сразу.

Насчёт определения — спрашивайте у того, кто вам это слово сказал; потому что тут мысли не читают. Есть объявление, есть инициализация. Возможно, там действительно понимается под определением объявление с одновременной инициализацией, а возможно что-то другое.
1
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
27.08.2012, 13:26 #6
Насколько мне известно, если функция никак не используется в программе, то она в нее не включается, если только она не объявлена со спецификатором static. Определение - собственно реализация функции.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2012, 13:26
Привет! Вот еще темы с ответами:

Объявление и инициализация переменных - C++
помогите исправить, пожалуйста.... Решение: #include <iostream.h> #include <math.h> double GetY (unsigned short int Number); ...

Объявление и инициализация динамической матрицы - C++
Ребят, только начал разбираться с матрицой. примерно я знаю как написать матрицу, но не знаю как написать динамическую матрицу, и чтоб...

Переплетение классов: объявление и инициализация - C++
вощм... пишу программу... есть у меня например 2 класса: Object (объект) и tck (точка) мне необходимо сделать так чтобы в объекте...

Основные типы данных, объявление и инициализация переменных - C++
ребятки, попробуйте 1) Объявить в программе переменные и константы (выбор обосновать) для хранения следующих данных: а) число , ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.08.2012, 13:26
Ответ Создать тему
Опции темы

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