Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывести список макросов, подскажите плиз 
:(
    Опции темы
slater
Дата 1.4.2010, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



приветствую всех

ребята, скажите плиз, как узнать(вывести) в определенном месте исходного файла список определленных(доступных) макросов?

например, в одном хидере мы определили макрос
#define MACROS 555

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

вот, а мне хотелось бы понять, как,например, в определенном месте узнать какие макросы определены, а какие нет. как это можно узнать?
(про
Код

#ifdef
#define то-то
#endif

я знаю, но тут мы только можем проверить сам макрос, определен он или нет)


и еще непонятен такой вопрос, макросы могут только определяться в исходных кодах или же каким то образом они схожи с переменными окружения(т.е. макросы могут определяться например в командных файлах или батниках), которые передаются процессу

заранее признателен за помощь
PM MAIL   Вверх
azesmcar
Дата 1.4.2010, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



ну и вопрос, даже не знаю что тут ответить.

Цитата(slater @  1.4.2010,  08:43 Найти цитируемый пост)
я знаю, но тут мы только можем проверить сам макрос, определен он или нет)

а тебе что надо?

Цитата(slater @  1.4.2010,  08:43 Найти цитируемый пост)
вывести

Код

system("grep \"#define\" file.h");

 smile 

Цитата(slater @  1.4.2010,  08:43 Найти цитируемый пост)
и еще непонятен такой вопрос, макросы могут только определяться в исходных кодах 

и заголовочных файлах, можно еще из командной строки передать компилятору.. smile 

Цитата(slater @  1.4.2010,  08:43 Найти цитируемый пост)
которые передаются процессу

какому процессы? макрос это препроцессорная директива, они заменяются еще до компиляции. 
PM   Вверх
MAKCim
Дата 1.4.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



прогоните нужный файл препроцессором
Код

# cpp <file>



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
slater
Дата 1.4.2010, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



Ясно, спасибо

т.е. макросы могет определяться только в хидерах, сишных файлах и передаваться через аргументы в main() в виде MACROS=тыры-пыры, но тогда вопрос, с макросами, переданные через аргументы, мы можем работать напрямую(т.е. спросить определен ли такой то макрос или нет) или через argv[] ?

Добавлено через 3 минуты и 13 секунд
Цитата(azesmcar @ 1.4.2010,  08:55)
ну и вопрос, даже не знаю что тут ответить.

Цитата(slater @  1.4.2010,  08:43 Найти цитируемый пост)
я знаю, но тут мы только можем проверить сам макрос, определен он или нет)

а тебе что надо?


мне нужно узнать в определенном месте все определенные макросы и как то просмотреть их все 
PM MAIL   Вверх
azesmcar
Дата 1.4.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата(slater @  1.4.2010,  09:09 Найти цитируемый пост)
т.е. макросы могет определяться только в хидерах, сишных файлах и передаваться через аргументы в main() в виде MACROS=тыры-пыры, 

Нет!
я сказал
Цитата(azesmcar @  1.4.2010,  08:55 Найти цитируемый пост)
из командной строки передать компилятору

а не программе

Цитата(slater @  1.4.2010,  09:09 Найти цитируемый пост)
мне нужно узнать в определенном месте все определенные макросы и как то просмотреть их все  

в каком виде их получить? распечатать на экран? чем grep не подходит?
PM   Вверх
slater
Дата 1.4.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



grep выведет только определения имеющися макросов в файле, он не покажет тех макросов, которые этим файлом возможно включаются

а если мы передаем компилятору аргументы, которые он будет считать макросами, значит каким то образом компилятор позволяет все макросы вывести, они ж храняться наверное в виде массива строк, или же не так?
PM MAIL   Вверх
azesmcar
Дата 1.4.2010, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата(slater @  1.4.2010,  09:39 Найти цитируемый пост)
grep выведет только определения имеющися макросов в файле, он не покажет тех макросов, которые этим файлом возможно включаются

можно написать скрипт, который это сделает, попробуй 
Цитата(MAKCim @  1.4.2010,  08:58 Найти цитируемый пост)
прогоните нужный файл препроцессором



Цитата(slater @  1.4.2010,  09:39 Найти цитируемый пост)
а если мы передаем компилятору аргументы, которые он будет считать макросами, значит каким то образом компилятор позволяет все макросы вывести, они ж храняться наверное в виде массива строк, или же не так? 

но он же у себя хранит а не передает программе в виде массива. Не могу придумать задачу под такие требования, зачем это нужно?
PM   Вверх
slater
Дата 1.4.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



ну я имею ввиду наверное как то можно вывести список всех макросов с помощью компилятора(просто на экран)
нужно это для того, чтобы, во-первых, знать какие есть неведомые макросы, во-вторых, использовать их по возможности в программе
PM MAIL   Вверх
azesmcar
Дата 1.4.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата(slater @  1.4.2010,  09:52 Найти цитируемый пост)
нужно это для того, чтобы, во-первых, знать какие есть неведомые макросы

Зачем о них знать? Все, что стандартно - описано в документации, все что нет - использованию не подлежит.

Цитата(slater @  1.4.2010,  09:52 Найти цитируемый пост)
во-вторых, использовать их по возможности в программе 

макросы вообще НЕ СТОИТ использовать, их надо по возможности избегать.

Это сообщение отредактировал(а) azesmcar - 1.4.2010, 09:57
PM   Вверх
slater
Дата 1.4.2010, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



[b]azesmcar[\b], вопрос не о полезности использования макросов и зачем оно надо!!!

как вывести обработанный код с помощью препроцессора - я знаю, вопрос в том, как вывести с помощью компилятора список макросов, определенных в исходном тексте
PM MAIL   Вверх
MAKCim
Дата 1.4.2010, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



slater, 

Цитата(slater @  1.4.2010,  10:14 Найти цитируемый пост)
как вывести с помощью компилятора список макросов, определенных в исходном тексте 

Код

# find -name "*.[ch]" -exec grep -Hn "# *define" {} \;



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
azesmcar
Дата 1.4.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата(slater @  1.4.2010,  10:14 Найти цитируемый пост)
как вывести обработанный код с помощью препроцессора - я знаю, вопрос в том, как вывести с помощью компилятора список макросов, определенных в исходном тексте 

с помощью компилятора - никак.
PM   Вверх
slater
Дата 1.4.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



MAKCim, azesmcar, спасибо!
PM MAIL   Вверх
xvr
Дата 1.4.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



С помощью компилятора (конкретно gcc) можно получить список всех файлов, которые включаются при компиляции данного файла (опции -M или -MM). Дальше grep на полученный список


Это сообщение отредактировал(а) xvr - 1.4.2010, 15:29
PM MAIL   Вверх
slater
Дата 1.4.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 20.11.2009

Репутация: -2
Всего: -4



xvr, спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.2102 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.