|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
Чертовщина с #include guards и #pragma once25.12.2019, 19:57. Показов 4119. Ответов 41
Метки #pragma once (Все метки)
Господа, у меня тут творится какая-то хрень: что бы я ни делал, h-файл инклудится дважды и константы, описанные в нём, в разных модулях имеют разные адреса! Рядышком, ага.
Что я делаю не так? И как это вообще можно объяснить? ---- Тестировал в CodeBlocks и DevCpp, компайлер mingw (gcc).
0
|
|
| 25.12.2019, 19:57 | |
|
Ответы с готовыми решениями:
41
Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h> #include<iostream>// подключение библиотек #include <conio.h> #include <climits> Чем отличается #include <cstring>, #include <string> и #include <string.h>? |
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 25.12.2019, 21:04 | ||
|
Вы же объявили переменные с внутренним связыванием. Они линкеру вообще не видны. А если бы и были видны, ругаться на них он все равно не имел бы права.
0
|
||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 25.12.2019, 21:08 [ТС] | |
|
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 25.12.2019, 21:18 | ||
|
В языке С++ в том числе именно эту проблему решили путем введения inline переменных. В С же, если такие оптимизации критичны, пришлось бы вертеться как-то по-другому...Но это все может быть критично скорее для скаляров. А вам, как я понял, в реальном коде нужен совсем не скаляр, а какой-то "тяжелый" объект. Тогда без вариантов: раздельное объявления/определение.
0
|
||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|||
| 25.12.2019, 21:24 [ТС] | |||
|
Добавлено через 6 минут Короче, нужно, чтоб в любом месте исходника си-программы были доступны этот указатель и размер. А пока у меня данные дублируются и указатели содержать разные адреса. --------- Как это лучше организовать?
0
|
|||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 25.12.2019, 21:28 | ||
static, то есть они локальные для каждой единицы трансляции. До тех пор, пока вы static сущности будете неоправданно называть "глобальными", будет получаться вот такая "удивительная" чушь.А про "одинаковые имена" меня вообще безмерно удивило. Для чего же по-вашему предназначен static в языке C??? static для того и предназначен, чтобы вы могли спокойно объявлять переменные и функции локальными для данной единицы трансляции, т.е. не беспокоиться о потенциальных конфликтах имен с другими единицами трансляции.
0
|
||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||
| 25.12.2019, 21:34 [ТС] | ||
|
Чо делать-то?
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||
| 25.12.2019, 21:41 | |||
|
Я только до сих пор не понял, о каком языке идет речь. Форум по С++. В проекте - явно С. Для внешних объявлений роль static заключается именно в управлении связыванием: внешнее или внутреннее.
0
|
|||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||||||||||||||||||||||
| 25.12.2019, 21:50 [ТС] | ||||||||||||||||||||||
|
----- extern не помог. Всё равно указатели имеют разные значения. main.c
0
|
||||||||||||||||||||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 25.12.2019, 21:51 [ТС] | |
|
0
|
|
|
фрилансер
6494 / 5722 / 1133
Регистрация: 11.10.2019
Сообщений: 15,282
|
||||||
| 25.12.2019, 21:55 | ||||||
|
Verevkin, вот два варианта решения. Выбирай, что больше понравится
1
|
||||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||||||||||
| 25.12.2019, 22:13 | ||||||||||||
|
Сколько раз уже повторили: никакого static в ваших объявлениях быть не должно. И определения переменных ни в коем случае не должны располагаться в заголовочном файле. В заголовочном файле допустимы только объявления переменных.var.h
prf.c (или любой другой .с файл)
0
|
||||||||||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||
| 25.12.2019, 22:21 [ТС] | ||
|
Весь вопрос родился из-за того, чтоб использовать константы, определённые в одном месте программы, где угодно, просто обращаясь к ним через имя.
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||
| 25.12.2019, 22:45 | |||
|
0
|
|||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||
| 25.12.2019, 22:55 [ТС] | ||
|
Казалось, задача тривиальная. А вот хрен.
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||
| 25.12.2019, 23:13 | ||||
|
Вся "нетривиальность" сводится лишь к продиранию через дебри постороннего шума (#include guards и т.п.), который к этой задаче не имеет абсолютно никакого отношения и который вы сюда нагнали в огромных количествах. Добавлено через 2 минуты Или наоборот, если вы хотите доступаться к таблице именно через отдельный указатель, то саму таблицу можно где-то "спрятать", т.е. сделать static а каком-то файле реализации, но вот указатель придется сделать глобальным именно теми методами, которые мы описали выше.
1
|
||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||||
| 25.12.2019, 23:17 [ТС] | ||||
|
0
|
||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 25.12.2019, 23:58 [ТС] | |
|
Задача решена, скилл прокачан.
Всем участникам спасибо. Кому интересно - прицепляю тестовый исходник.
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||
| 26.12.2019, 01:50 | |||
|
Добавлено через 18 минут Остается только вопрос о том, почему у вас сами указатели не являются константными. Вам нужно иметь возможность их изменять?
0
|
|||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 26.12.2019, 08:16 [ТС] | |
|
0
|
|
|
фрилансер
6494 / 5722 / 1133
Регистрация: 11.10.2019
Сообщений: 15,282
|
|
| 26.12.2019, 08:38 | |
|
Verevkin, наверное, имеется в виду константность самого объекта указателя
const uint32_t* const pTABLE=TABLE; И я тоже не понимаю, зачем этот указатель вообще нужен. Можно таблицу сделать не static и пусть торчит себе наружу. указатель тут - лишний.
0
|
|
| 26.12.2019, 08:38 | |
|
Чертовщина на рамблере Shift и чертовщина... Чертовщина с KWrite
Warning: include(1) [function.include]: failed to open stream: No such file or directory in Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
|
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока
Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|