|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
Чертовщина с #include guards и #pragma once25.12.2019, 19:57. Показов 4192. Ответов 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>? |
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 25.12.2019, 21:04 | ||
|
Вы же объявили переменные с внутренним связыванием. Они линкеру вообще не видны. А если бы и были видны, ругаться на них он все равно не имел бы права.
0
|
||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 25.12.2019, 21:08 [ТС] | |
|
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 25.12.2019, 21:18 | ||
|
В языке С++ в том числе именно эту проблему решили путем введения inline переменных. В С же, если такие оптимизации критичны, пришлось бы вертеться как-то по-другому...Но это все может быть критично скорее для скаляров. А вам, как я понял, в реальном коде нужен совсем не скаляр, а какой-то "тяжелый" объект. Тогда без вариантов: раздельное объявления/определение.
0
|
||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|||
| 25.12.2019, 21:24 [ТС] | |||
|
Добавлено через 6 минут Короче, нужно, чтоб в любом месте исходника си-программы были доступны этот указатель и размер. А пока у меня данные дублируются и указатели содержать разные адреса. --------- Как это лучше организовать?
0
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 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
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|||
| 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
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
|
||||||
| 25.12.2019, 21:55 | ||||||
|
Verevkin, вот два варианта решения. Выбирай, что больше понравится
1
|
||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||||||||||||
| 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
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|||
| 25.12.2019, 22:45 | |||
|
0
|
|||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||
| 25.12.2019, 22:55 [ТС] | ||
|
Казалось, задача тривиальная. А вот хрен.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||||
| 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
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|||
| 26.12.2019, 01:50 | |||
|
Добавлено через 18 минут Остается только вопрос о том, почему у вас сами указатели не являются константными. Вам нужно иметь возможность их изменять?
0
|
|||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 26.12.2019, 08:16 [ТС] | |
|
0
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
|
|
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|