The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите понять макроподстановку"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите понять макроподстановку"
Сообщение от ghost emailИскать по авторуВ закладки(??) on 05-Апр-04, 21:24  (MSK)
Всем привет!
Вот фрагмент работающего кода #define do_string(item) (do_read(item,#item,__FILE__,__LINE__))
Чего значит #item? Что компилятор подставляет вместо __FILE__ , __LINE__ ? (В программе эти константы не определяться).
Спасибо. (Язык С)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Помогите понять макроподстановку"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 05-Апр-04, 21:44  (MSK)
>Чего значит #item?

Значение параметра макроса по имени item как литерал (строка).
Моя твоя русский плохо говорить, но вот пример программы, она всё объяснит.

----
#include <stdio.h>

#define Test(item) #item

int main()
{
  printf("%s\n", Test(Test1));
  printf("%s\n", Test(test test test));
  return 0;
}
----

>Что компилятор подставляет вместо __FILE__ , __LINE__ ? (В
>программе эти константы не определяться).

Имя обрабатываемого файла (то бишь того, в котором макрос вызвали)
как строку и текущий номер строчки как число. Вот ещё пример

---
#include <stdio.h>

int main()
{
  printf("%s : %d\n", __FILE__, __LINE__);
  return 0;
}
---

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Помогите понять макроподстановку"
Сообщение от ghost emailИскать по авторуВ закладки(??) on 05-Апр-04, 21:51  (MSK)
Большое спасибо! Особо за примерчики - без них половины точно не понял бы.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Помогите понять макроподстановку"
Сообщение от vnp emailИскать по авторуВ закладки on 05-Апр-04, 21:50  (MSK)
>Всем привет!
>Вот фрагмент работающего кода #define do_string(item) (do_read(item,#item,__FILE__,__LINE__))

>Чего значит #item?

Stringise (строковать) item. Аргумент в кавычках.

>Что компилятор подставляет вместо __FILE__ , __LINE__ ? (В программе эти константы не определяться).

В натуре, координаты (имя файла и номер строки) точки макровызова.

>Спасибо. (Язык С)

Еще полезно gcc -E и посмотреть, что получается.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру