Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Раздельная компиляция. Связывание const-переменных07.09.2017, 13:34. Показов 3643. Ответов 70
Метки нет (Все метки)
Не совсем понимаю процесс раздельной компиляции, или то как работает связывание const-переменных. Имеется три файла:
const_test.h
const_test.cpp
general.cpp
Собственно, почему это не вызывает ошибку компиляции? ( Компилировал в VS 2013 ) Разве не должен был произойти конфликт имен, когда в файл "const_test.cpp" включился файл "const_test.h"? Ведь, как я понимаю, extern const int var; -- это отличная переменная от const int var = 10; . Теперь немного изменим код:const_test.h
const_test.cpp
general.cpp
Это уже ошибка. И это, по-моему нормально ( а по законам C++ нет? ), ведь инструкция extern int var; 1) порождает конфликт имен, 2) ссылается на несуществующую переменную ( ведь ни в одной единице трансляции не была объявлена внешняя int переменная с именем var ). В коде изменилось ( опять же таки, по моему мнению ) только то, что переменная var перестала быть const .P.S.: Знаю, что не умею доступно объяснять, но у здешних жителей форума, как показывает практика, хорошо развиты телепатические способности, проблем возникнуть не должно
1
|
07.09.2017, 13:34 | |
Ответы с готовыми решениями:
70
Раздельная компиляция Раздельная компиляция раздельная компиляция Раздельная компиляция |
17 / 16 / 3
Регистрация: 18.08.2017
Сообщений: 54
|
|
09.09.2017, 21:03 | 61 |
А не практическая деятельность?
Покажите, где тут UB или где поведение не соответствует стандарту.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
09.09.2017, 21:29 | 62 |
я понимаю так:
всякие lvalue/rvalue/prvalue - категории доступа к объектам. они определяют контексты в которых можно, или нельзя получать доступ к объекту. prvalue - категория доступа к временному объекту. а можно сказать, что этот "result object" и есть объект, хранящий prvalue. никакой абсолютно разницы. Добавлено через 6 минут не тупите: #59
0
|
17 / 16 / 3
Регистрация: 18.08.2017
Сообщений: 54
|
|
09.09.2017, 21:34 | 63 |
Там написано "не лажают". Раз ссылаетесь на #59, это значит что вы согласны, что не лажают?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
09.09.2017, 21:43 | 64 |
Сообщение было отмечено Captain Maxee как решение
Решение
1
|
17 / 16 / 3
Регистрация: 18.08.2017
Сообщений: 54
|
|
09.09.2017, 21:48 | 65 |
Несколько сообщений назад было "ну значит, компиляторы лажают". Ну да ладно. Что было — то прошло.
Если не лажают, то, исходя из там UB?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
09.09.2017, 21:58 | 66 |
0
|
17 / 16 / 3
Регистрация: 18.08.2017
Сообщений: 54
|
|
09.09.2017, 22:17 | 67 |
hoggy, т.е. ни UB, ни лажи компиляторов нет?
Поразительно быстрые изменения после такого категоричного тона.
0
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
09.09.2017, 22:26 [ТС] | 68 |
УГнетатель, можно подумать, Вы никогда в своей жизни не ошибались?
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
09.09.2017, 22:40 | 69 |
вы какой то странный.
если после #58 и #59 у вас ещё остались какие то вопросы, то боюсь, я вам помочь ничем уже не смогу. мой тезис сохраняет свою актуальность: если с кодом (любым) есть какая то лажа, значит одно из двух: либо налажал программист, либо компилятор.
0
|
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 93
|
|
08.09.2020, 23:45 | 70 |
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
09.09.2020, 00:04 | 71 |
Тут я, кстати, не прав. Когда extern-объявление следует за объявлением с уже назначенным связыванием, extern-объявление наследует уже назначенное связывание из предыдущего объявления. Во втором примере переменная
var получит внутреннее связывание.extern-объявление назначает внешнее связывание только тогда, когда оно является самым первым. В первом примере переменная var получит внешнее связывание.
2
|
09.09.2020, 00:04 | |
09.09.2020, 00:04 | |
Помогаю со студенческими работами здесь
71
Шаблоны и раздельная компиляция Раздельная компиляция файлов Раздельная компиляция и шаблоны Раздельная компиляция и шаблоны Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |