Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2013, 13:18   #1
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию макрос - сформировать строку с переменной

Приветствую!
Прошу подсказать как правильно реализовать вот следующее:
есть код
Код:
#define info(n,a) (people ## n ## _ ## a)

char *people1_l = "Ivanov";
char *people1_n = "Vasya";
int n = 1;
	
printf("%s\n", info(n,l));
printf("%s\n", info(n,n));
но так макрос воспринимает первый параметр как строку, а не берёт значение из переменной.

Вопрос: как правильно в макросе обработать первый параметр как переменную? и сформировать с ним строку?
frommars вне форума Ответить с цитированием
Старый 11.02.2013, 14:00   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
но так макрос воспринимает первый параметр как строку, а не берёт значение из переменной.
Так и только так. Когда производится подстановка макросов, значения каких-либо переменных не определены.
Цитата:
Вопрос: как правильно в макросе обработать первый параметр как переменную?
Использовать макрос:
Код:
#define n 1
Разумеется, когда результат макроподстановки зависит от порядка применения макросов, результат может оказаться неожиданным. Не помню, насколько жёстко оный порядок оговаривается стандартом, но для одинакового результата на gcc, msvc и Borland C++ мне пришлось развешивать разнообразные ifdef.
Abstraction вне форума Ответить с цитированием
Старый 11.02.2013, 14:06   #3
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Так и только так. Когда производится подстановка макросов, значения каких-либо переменных не определены.Использовать макрос:
Код:
#define n 1
Код:
#define plus(a) a + 5 

int n = 5;
printf("%d\n", plus(n));
говорите переменные не определены?
frommars вне форума Ответить с цитированием
Старый 11.02.2013, 14:24   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну так n+5 вполне допустимое выражение в принтф.

советую посмотреть как в gcc запустить один препроцессор и посмотреть что он выдает и что потом кормится компилятору.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.02.2013, 14:31   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
говорите переменные не определены?
Значения переменных. Если Вам не очевидно, почему это так - подумайте над тем, что такое "значение переменной". В Вашем примере:
Код:
#define plus(a) a + 5 

int n = 5;
printf("%d\n", plus(n));
После макроподстановки:
Код:
int n = 5;
printf("%d\n", n + 5);
Abstraction вне форума Ответить с цитированием
Старый 11.02.2013, 16:06   #6
frommars
Форумчанин
 
Регистрация: 02.07.2011
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Значения переменных. Если Вам не очевидно, почему это так - подумайте над тем, что такое "значение переменной". В Вашем примере:
Код:
#define plus(a) a + 5 

int n = 5;
printf("%d\n", plus(n));
После макроподстановки:
Код:
int n = 5;
printf("%d\n", n + 5);
точно, не подумал...
frommars вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Макрос dmitriyhot Помощь студентам 0 02.06.2011 19:38
Exel - при открытии файла через макрос, если файл отсутствует - виснет весь макрос gregory1b Microsoft Office Excel 2 14.10.2010 11:51
Макрос, запускающий макрос из другого закрытого файла petruha Microsoft Office Excel 7 14.03.2010 11:31
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51