MiklPolikov 0 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба Подскажите, как в Keil увидеть в какой последовательности компилируются файлы и почему она такая ? Предположим, делаю так: В файле h1.h #define CONST123 123 В файле h2.h #ifndef CONST123 #define CONST123 12345 #endif Потом #include "h1.h" #include "h2.h" Но получаю ошибку "macro redefined" . То есть почему-то h1.h компилируется вторым. Хочу понять, почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 24 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 49 minutes ago, MiklPolikov said: h1.hex Во-первых, при чем тут расширение hex? Это такой новый способ извращений? Во-вторых, const - это предопределенный тип данных, встроенный язык. Очередной новый способ извращений? В третьих, при чем тут keil? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MiklPolikov 0 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 20 minutes ago, Forger said: Во-первых, при чем тут расширение hex? Это такой новый способ извращений? Во-вторых, const - это предопределенный тип данных, встроенный язык. Очередной новый способ извращений? В третьих, при чем тут keil? Опечатка Конечно .*h И конечно CONST123 Keil - ну потому что компилирую в Keil. В настройках проекта ARM Compiler: Default 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба У себя такой ситуации не смог повторить, препроцессор работает законно. Чего-то Вы явно недоговариваете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 24 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 8 minutes ago, MiklPolikov said: Keil - ну потому что компилирую в Keil. В настройках проекта ARM Compiler: Default 6 Только что проверил в v6.19, все прекрасно компилируется. Файл, где включил эти два инклуда, использую *.cpp 1 hour ago, MiklPolikov said: #include "h1.h" #include "h2.h" куда вставлены эти две строчки у вас? если не знали, компилятор (точнее препроцессор комплятора) сначала собирает все инклуды в каждом c/cpp файле в огромные файлы, а уже потом компилирует. поэтому в каком порядке вы сделаете эти инклуды внутри другого файла, то именно в таком порядке они и будут лежать, это железно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MiklPolikov 0 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 6 minutes ago, Arlleex said: У себя такой ситуации не смог повторить, препроцессор работает законно. Чего-то Вы явно недоговариваете. Да. У меня файлов больше и проект больше. Во всех файлах последовательность строк такая #include "h1.h" #include "h2.h" Изначальный вопрос - можно ли в Keil увидеть последовательность компилирования, и откуда она берется ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 1 час назад, MiklPolikov сказал: #include "h1.h" #include "h2.h" Но получаю ошибку "macro redefined" . То есть почему-то h1.h компилируется вторым. Хочу понять, почему. Причём тут "компиляция"? Никакой h1.h не компилируется. #include "h1.h" - это вставка текста одного файла в другой. Вставка происходит в том порядке, в каком вы написали. И происходит до компиляции .c-файла, в который оно вставляется. Прочтите учебник по теме: "сопроцессор си". 4 минуты назад, MiklPolikov сказал: Изначальный вопрос - можно ли в Keil увидеть последовательность компилирования, и откуда она берется ? Вставка #include и макроподставка не имеют никакого отношения к компиляции. Советую открыть учебник по си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 24 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 6 minutes ago, MiklPolikov said: Да. У меня файлов больше и проект больше. Ну так разберитесь у себя в проекте, убрав оттуда "все лишнее", чтобы понять где в ВАШЕМ проекте проблема. Тут как минимум у двоих комрадов в вашем примере нет проблем, компилятор отрабатывает на все 100. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба В 30.08.2023 в 16:45, jcxz сказал: Прочтите учебник по теме: "сопроцессор си". Препроцессор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 74 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 2 hours ago, MiklPolikov said: Но получаю ошибку "macro redefined" . То есть почему-то h1.h компилируется вторым. Хочу понять, почему. как уже сказали он не компилируется, а include тупо вставляет содержимое, а ругается скорее всего потому, что где-то до этого делается инклюд какого-нибудь другого файла, который делает #include "h1.h" https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба У компилятора должен быть ключ "не стирать выходные файлы препроцессора". Изучив такой файл можно понять, какой заголовочный файл где подключился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 24 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 30 minutes ago, Сергей Борщ said: У компилятора должен быть ключ "не стирать выходные файлы препроцессора". Изучив такой файл можно понять, какой заголовочный файл где подключился. Там немного не так, нужно поставить галки в свойствах проекта, чтобы эти файлы создавались на диске, иначе они просто висят в памяти компилятора и при выходе из него естественно пропадают: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 30 августа, 2023 Опубликовано 30 августа, 2023 · Жалоба 2 часа назад, Forger сказал: нужно поставить галки в свойствах проекта, чтобы эти файлы создавались на диске, Да, согласен, ступил. У гцц соответствующий ключ делает то же самое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться