LINUX.ORG.RU

Показать все макросы в определённой строке кода

 , , ,


0

2

Привет, ЛОР!

У меня тут случайно образовалась огромная каша чужого кода на сишечке, и каким-то боком получается, что макросы, которые должны быть заданы в определённой точке, на самом деле отсутствуют.

Вопрос: а есть ли какая-нибудь прагма или что-то подобное, чтобы выдать список всех сишных макросов в определённой строке кода? Про cc -E я в курсе, но это немного не то, потому как не учитывает переопределения и #undef.

Гугл также не очень помог.

Ответ на: комментарий от anonymous

а это что?https://stackoverflow.com/a/23321913

Это не то. Я хочу примерно следующее:

#define A 1
#define B 2

#undef A

#pragma PLEASE_DUMP_EVERYTHING

#define C 3

при сборке это должно вывести «B 2» на экране.

Типа, я знаю про cpp -dD, но проект жирен как я не могу и я не хочу вечер разбираться во всей этой срани.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от XMs

Грепалка сломалась.

Тут ещё лулз проекта в том, что заголовочные файлы друг друга не подключают и по отдельности их тупо не собрать. Они все включаются только в сишных файлах и строго в определённом порядке. Поэтому я не могу сделать просто cc -E file.h.

hateyoufeel ★★★★★
() автор топика

#ifdef макрос
#error
#endif
Можно сгенерироватт dep файл, погрепать по файлам в нём упомянутых все #define, добавит к нему все predefined макросы gcc и по полученному файлу сгенерировать .inc файл, который проверит каждый макрос и в зависимости от этого выдаст форнинг нужного типа. Так получить множесиво всех задефайненных макросов в строчке, вставив в неё include

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от PPP328

Откройте в норм редакторе. Тот же qtcreator умеет парсить макросы и по клику на них открывает определение.

В том-то и дело, что я точно не знаю, какого именно макроса не хватает. Там их с десяток минимум. Дикая лашпа из #ifdef и подобного говна.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от XMs

Так собирай модули. Если грубо:cc -E file.c | grep FOO

См. выше. Я точно не знаю, какого мне макроса не хватает, поэтому я хочу увидеть вообще всё, определённое в конкретной точке. Если сделать cc -E, там получается три тыщи строк кода до того места, которое мне нужно, и я вот прямо очень не хочу это всё глазами разгребать. Плюс, cc -E даёт результат уже после того, как препроцессор отработал, а мне нужно до.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

В том-то и дело, что я точно не знаю

Зато потом будешь бегать по ЛОРу с воплями про сраных сишников, высравших сраный говнокод, скромно умалчивая собственную тупость.

anonymous
()
Ответ на: комментарий от anonymous

В том-то и дело, что я точно не знаю

Зато потом будешь бегать по ЛОРу с воплями про сраных сишников, высравших сраный говнокод, скромно умалчивая собственную тупость.

Там примерно полсотни проверок разных макросов, высранных из configure. Да, это реально сраные сишники, высравшие сраный говнокод, причём начали они это делать ещё до моего рождения.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от dataman

Попробовать допилитьhttps://github.com/p-ranav/fccf.

a command-line tool that quickly searches through C/C++ source code in a directory based on a search string and prints relevant code snippets that match the query

Это ваще не то. Даже не близко.

Пока что налабал скрипт, который собирает все возможные макросы по всему коду и генерит файл с копипастой типа:

#define STRING2(x) #x
#define STRING(x) STRING2(x)

#ifdef MACRO
# pragma message "MACRO = " STRING(MACRO)
#endif

Файл уже можно инклудом сунуть в нужное место.

Но господи, какая же это срань…

hateyoufeel ★★★★★
() автор топика

Тред не читал. Выстави компилятору опция для генерации всей единицы трансляции. У тебя будет файл по которому хотя бы искать define/undefine будет проще. у gxx это вроде как --save-temps. Точно не помню.

PRN
()