Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831

Нюансы терминологии и синтаксиса: объявление и определение

31.01.2016, 17:52. Показов 3207. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!
Ребята, подскажите, что есть объявление структуры, а что есть определение структуры? Читал сайты, но на одном пишут, что определение, а на втором - объявление.

Например, что есть это:

C++
1
2
3
4
struct example{
    int intNumber;
    float floatNumber;
};
Добавлено через 4 минуты
Да, кстати, читал на сайте microsoft, что любое объявление является определением (кроме ряда случаев, перечисленных там). Судя из этого, выше представлено определение, верно?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2016, 17:52
Ответы с готовыми решениями:

Нюансы синтаксиса
Откуда взялась функция nextOdd()? package main import "fmt" func makeOddGenerator() func() int { var i int = 0 ...

Нюансы синтаксиса: использование using
Всем доброе утро, вообщем хотел спросить давно уже, а что делает using, помимо вот такого его применения using std::cout; //... ...

Нюансы синтаксиса: использование typedef
typedef int(*compare_func)(void* left, void* right); В первых круглых скобках - "*compare_func" новое имя типа, представляющее указатель...

62
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 00:23
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Компилятор ругается, потому как нужно
Croessmah, я же не спрашиваю: почему ругается компилятор. Я о другом, о моём представлении (наверное, неправильном):
Цитата Сообщение от nd2 Посмотреть сообщение
Ругнулся линкер - нет определения, ругнулся компилятор - нет объявления.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 00:25
Подытожу:
C++
1
2
3
4
5
6
7
8
9
struct SomeType ;//Объявление (declaration, forward declaration), не являющееся определением
struct SomeType //Объявление, являющееся определением (definition)
{
   void foo() ;//Declaration
   void bad() {} //Definition   
   static void func() ; //Declaration
   int x; //Definition
   static int s ; //Declaration
};
3
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 00:29
Цитата Сообщение от Croessmah Посмотреть сообщение
//Объявление, являющееся определением (definition)
Вот это нехорошо. Сразу вспоминается объявление с определением встроенных типов. Там это совсем другое обозначает.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 00:30
Цитата Сообщение от nd2 Посмотреть сообщение
Там это совсем другое обозначает.
C++
1
2
extern int x ;//Объявление, не являющееся определением
int x; //Объявление, являющееся определением
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 00:32
И я же об этом:
Цитата Сообщение от Croessmah Посмотреть сообщение
int x; //Объявление, являющееся определением
Тут память выделяется, поэтому и определение. А тут какая память выделяется?
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
struct SomeType //Объявление, являющееся определением (definition)
{
void foo() ;//Declaration
void bad() {} //Definition * 
static void func() ; //Declaration
int x; //Definition
static int s ; //Declaration
};
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 00:47
Цитата Сообщение от nd2 Посмотреть сообщение
Тут память выделяется, поэтому и определение.
А теперь смотрим.
C++
1
int x ;//Определение x, int уже определен
C++
1
SomeClass x; //Определение x, SomeClass уже определен
Что здесь по другому?
В данном случае Вы путаете понятия "определение класса" и "определение переменной"
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.02.2016, 00:51
Цитата Сообщение от Croessmah Посмотреть сообщение
Подытожу:
другими словами, вы хотите сказать,
что "определенный тип" это тоже самое,
что и "полный тип" (complete)

C++
1
2
3
4
5
6
7
8
9
struct some; // <--- incomplete
 
....
 
struct some // <--- complete
{
    some(); //<--- пофиг на линкер
      
};
ну мне такая терминология не нравится.

потому что на практике критично различать что есть форвард,
что уже полностью описано,
и что реально способно функционировать.

почему функция определена?
потому что у неё уже есть туловище.
ею можно пользоваться.

как то не логично считать класс определенным,
когда ещё не определенны его запчасти,
и никуда он без них не поедет.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 01:08
Цитата Сообщение от hoggy Посмотреть сообщение
как то не логично считать класс определенным,
когда ещё не определенны его запчасти,
и никуда он без них не поедет.
Ну так класс определен, а запчасти нет.
Причем, если запчасть не используется,
то её определение и не нужно.
Ведь если в автомобиле нет магнитолы - он всё равно автомобиль,
и прекрасно справляется со своей функцией,
а если колеса снять - тоже автомобиль, но врядли он поедет.

В пункте 3.1/2 ясно написано что является declaration, а что definition.
И там хоть нравится нам, хоть нет - так оно и есть.

Добавлено через 3 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
другими словами, вы хотите сказать,
что "определенный тип" это тоже самое,
что и "полный тип" (complete)
Просто другой пункт:
3.9
5. ...
Incompletely-defined object types and the void types are incomplete types
Так что фактически - да
2
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
01.02.2016, 16:59  [ТС]
Croessmah, а при объявлении, являющемся определением структуры физическая память не выделяется?
Например, тут:
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
struct SomeType ;//Объявление (declaration, forward declaration), не являющееся определением
struct SomeType //Объявление, являющееся определением (definition)
{
* *void foo() ;//Declaration
* *void bad() {} //Definition * 
* *static void func() ; //Declaration
* *int x; //Definition
* *static int s ; //Declaration
};
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 17:05
Цитата Сообщение от Nishen Посмотреть сообщение
а при объявлении, являющемся определением структуры физическая память не выделяется?
Хотя вопрос не мне... В том-то и дело, что не выделяется. Почему мне и не хочется называть это определением, но со стандартом не поспоришь...
1
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
01.02.2016, 17:08  [ТС]
nd2, столько терминологии, что свихнуться можно. Я разобрался, спасибо!
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 17:10
Да и Croessmah тут не по стандарту пишет: в стандарте не пишется, что это объявление, являющееся определением, там просто: definition. Переводи, как хочешь.
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
01.02.2016, 17:28  [ТС]
nd2, а если сделать так, память тоже не выделится:

C++
1
2
3
4
struct example{
    int intNumber = 1;
    float floatNumber = 0.5F;
};
Или это будут просто значения "по умолчанию"?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 17:36
Цитата Сообщение от Nishen Посмотреть сообщение
а если сделать так, память тоже не выделится:
Не выделится.
Цитата Сообщение от Nishen Посмотреть сообщение
это будут просто значения "по умолчанию"?
Да.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 18:35
Цитата Сообщение от nd2 Посмотреть сообщение
в стандарте не пишется, что это объявление, являющееся определением
Нюансы терминологии и синтаксиса: объявление и определение
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 19:30
Цитата Сообщение от Croessmah Посмотреть сообщение
Нюансы терминологии и синтаксиса: объявление и определение
...
Цитата Сообщение от Croessmah Посмотреть сообщение
Example: all but one of the following are definitions:
C++
1
2
3
//...
struct S { int a; int b; }; //defines S, S::a, and S::b
//...
Добавлено через 20 минут
Цитата Сообщение от Nishen Посмотреть сообщение
а если сделать так, память тоже не выделится:
C++
1
2
3
4
struct example{
    int intNumber = 1;
    float floatNumber = 0.5F;
};
Знаю один случай, когда память выделяется при определении класса:
C++
1
2
3
4
struct example
{
    static const int intNumber = 1;
};
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 20:18
nd2, это объявление статической переменной.
Никакая память не выделяется.
Мало того, еще и линкер будет орать, когда ему потребуется определение
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 20:25
Цитата Сообщение от Croessmah Посмотреть сообщение
Никакая память не выделяется.
Мало того, еще и линкер будет орать, когда ему потребуется определение
...
Миниатюры
Нюансы терминологии и синтаксиса: объявление и определение  
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
01.02.2016, 20:30
nd2, попробуйте взять адрес этой переменной )))
Многое прояснится.
А пока эта константа не требует определения )))
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
01.02.2016, 20:36
Цитата Сообщение от Croessmah Посмотреть сообщение
А пока эта константа не требует определения )))
Хочешь сказать, что 1 поместилась неизвестно куда?

Добавлено через 2 минуты
Взял адрес, и что?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2016, 20:36

Нюансы синтаксиса C++ - что обозначает запись *=
Здравствуйте, дорогие форумчане. Это, скорее всего, глупый вопрос, но можете объяснить немного использование таких вот идей: ret *= i ...

Нюансы синтаксиса: функции и квалификатор inline
Значит в принципе если функция не объявлена inline то она должна иметь прототип, иначе нужно объявлять inline... может вопрос...

Нюансы синтаксиса: знак ^ и возведение в степень
при t=9949, k=1 и d=(-1) ro=((t &gt;&gt; k) ^ d) каким-то образом выходит (-4974), а при k=0 - (-9949) как это может быть?

Нюансы синтаксиса: указатель на пользовательский тип
скажите пожалуйста уважаемые форумчане , какая разница будет в этом? #include &lt;iostream&gt; class foo{ public: int a; ...

Нюансы синтаксиса: как напечатать логическое И в C++?
Как напечатать логическое И в с++?


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru