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

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

31.01.2016, 17:52. Показов 3285. Ответов 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru