Re[2]: MSVC2022/2026 не видит макрос, вернее, пытается его к
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.11.25 11:57
Оценка:
Здравствуйте, B0FEE664, Вы писали:

M>>Вот прямо перед использованием проверяю его существование — останавливается по ошибке "UMBA_RULE_OF_FIVE is defined before use". Отключаю проверку — получаю "Function definition for 'UMBA_RULE_OF_FIVE' not found."

M>>Что за бред?

BFE>Скорее всего разный (и условный) порядок подключения инклюдов в разных файлах компиляции.


Порядок разный, да. Но не условный. Хидер, в котором объявлен макрос, защищён только #pragma once. Он может где-то ещё включаться, но точно включается в том файле, где происходила ошибка

Более того, я проверял определение через #if defined() — срабатывало, и останавливалось там на #error. Если #error закоментировать — то опять ошибка.

Решил попытаться локализовать проблему, сделал тестик, там подключается только один мой файл, объявил структуру, в которой только мой макрос и всё — ошибка воспроизводится. Сделал второй тест — убрал инклюд, вставил непосредственно его содержимое — ошибка воспроизводится. Потом ещё приседал по разному — и вдруг ошибка перестала вопроизводится.

У меня проект на симейке. Закрыл студию, удалил все файлы, перегенерил заново, запустил, собираю и так и сяк — ошибка не воспроизводится. Всё работает и в 2022 и в 2026ой студиях.

Еще была куча предупреждений, типа pBuf используется до инициализации. Но как же до, когда тремя строчками выше pBuf явно присваивается.

И вообще куча предупреждений была. Кое-какие при этом были полезными. А сейчас всё собирается с нулём ошибок, предупреждений, и даже сообщений.

Что это было, я так и не понял, но всё заработало.

Да, только только поставил 2026ую студию, комп не перегружал. Но и перед тем, как всё заработало — тоже не перегружал. В общем, сижу в непонятках
Маньяк Робокряк колесит по городу
Отредактировано 29.11.2025 12:35 Marty . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.