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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> устраивает ли Вас препроцессор С++? нужно ли расширение функциональности 
:(
    Опции темы
 
Устраивают ли Вас возможности препроцессора С++?
Да, никаких расширений не нужно [ 21 ]  [77.78%]
Да, но расширение бы не помешало [ 6 ]  [22.22%]
Нет, они не отвечают моим требованиям [ 0 ]  [0.00%]
Всего проголосовавших: 27
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
MAKCim
Дата 18.5.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(jonie @  17.5.2007,  23:07 Найти цитируемый пост)
inline - функции чем не устраивают?!

ты дашь гарантию, что они будут inline?  smile 
Цитата(jonie @  17.5.2007,  23:07 Найти цитируемый пост)
приведенный пример хоть и встречается, но редко....тем более что если массив такой локальный то ничего хорошего не будет из той инициализации ...

пример надуманный (только, чтобы идентифицировать конструкцию)


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

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата

ты дашь гарантию, что они будут inline?   
я не писал компилятор (всмысле писал когда-то как курсовик), но то не о том)=> никаких гарантия я дать не могу, однако хоть стандарт и не оговаривает что inline будут inline, но компилятору я пологаю можно указать чтобы он делал принудилово... опять же как реализовано.
Да и в общем случаем "оно вам надо" ? Обычно большой оптимизации по скорости не будет (время вызова скажем __fastcall функции << времени  цикла (или иной, не подходящей под определение inline, как посчитает (если посчитает) умный компилятор) , т.о. этим временем можно пренебречь. Безусловно, существуют задачи, в которых размер стека жестко ограничен (кодинг железа, я пологаю),но с таким вещаями я не знаком и думаю там есть средства....
Цитата

Добавлено через 4 минуты и 37 секунд
Кстати, а почему нет варианта "В препроцессоре и так много лишнего, сократить до минимума". А то начинаешь юзать всякие темплейтные min/max/swap, а какой-то умник их уже через дефайны переопределил. И начинаешь чесать репу, лихорадочно соображая что сделал не так.
упс, когда писал свой пост пропустил это, но, как минимум я не один так считаю) и то гуд... это - мой вариант выбора.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
MAKCim
Дата 19.5.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(jonie @  19.5.2007,  00:36 Найти цитируемый пост)
но компилятору я пологаю можно указать чтобы он делал принудилово... опять же как реализовано.

вот именно, переносимость будет -> 0
Цитата(jonie @  19.5.2007,  00:36 Найти цитируемый пост)
Да и в общем случаем "оно вам надо" ? Обычно большой оптимизации по скорости не будет (время вызова скажем __fastcall функции << времени  цикла (или иной, не подходящей под определение inline, как посчитает (если посчитает) умный компилятор) , т.о. этим временем можно пренебречь.

макросы нужны не только для эмуляции inline


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

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


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



ИМХО, есть несколько принципиальных случаев/моментов, когда макросы незаменимы в принципе. То есть аналогию с помощью чисто языковых конструкций построить не удастся.
Есть еще группа случаев, когда удастся, но слишком дорогой ценой (размер или производительность пострадают).
В остальных случаях можно использовать [шаблонные ][inline ]функции.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
vinter
Дата 19.5.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



а смысл данного опроса?  допустим мне не нравится то то, то то. Кто то согласится, кто то нет. Но это не изменит ничего. Какой-то бесполезный топик. извиняюсь за оффтоп


--------------------
Мой блог
PM MAIL WWW   Вверх
Любитель
Дата 19.5.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Jcs @  18.5.2007,  11:15 Найти цитируемый пост)
Правильней было бы спросить - устраивают ли Вас возможности метапрограммирования с С++?

Вот, если так - поддержу. Только не макросы.

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

Цитата(MAKCim @  19.5.2007,  08:13 Найти цитируемый пост)
макросы нужны не только для эмуляции inline 

Не спорю.

Цитата(MAKCim @  18.5.2007,  20:24 Найти цитируемый пост)
пример надуманный 

Вот именно. Можешь представить практические примеры (точнее - похожие на практические), где такое можно было бы красиво использовать?

Единственное, что кстати не помешает в препроцессоре - области видимости макросов (банальные блоки). Но это вроде и так обещали...

Цитата(vinter @  19.5.2007,  13:02 Найти цитируемый пост)
а смысл данного опроса?  допустим мне не нравится то то, то то. Кто то согласится, кто то нет. Но это не изменит ничего. Какой-то бесполезный топик. извиняюсь за оффтоп 

Ну, я бы не сказал, что бесполезный. Может ничего и не изменит (99,99999 %), но поговорить интересно smile


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 19.5.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Любитель @  19.5.2007,  14:02 Найти цитируемый пост)
MAKCim, вот в реальной жизни все твои примеры с циклами и перегрузкой для макросов когда-нибудь хотелось использовать (я, конечно, про плюсы)? Сомневаюсь, если честно.

хотелось пару раз
Цитата(Любитель @  19.5.2007,  14:02 Найти цитируемый пост)
Можешь представить практические примеры (точнее - похожие на практические), где такое можно было бы красиво использовать?

Код

#define SYMBOL(name, value)    \
    __asm__(#name" = %0" : : "I" (value))

static void __generate() {
#repeat COUNT
    #ifdef value#__ITERATION__
        SYMBOL(value#__ITERATION__, value#__ITERATION__);
    #endif
#endrep
}

хотя пример тоже какой-то нереальный получился  smile 

Это сообщение отредактировал(а) MAKCim - 19.5.2007, 15:47


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

PM MAIL   Вверх
Любитель
Дата 19.5.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(MAKCim @  19.5.2007,  15:47 Найти цитируемый пост)
хотя пример тоже какой-то нереальный получился  

 smile По-моему, совсем нереальный. Препроцессор для асма - это совсем другой вопрос, ибо там шаблонов нет smile Ввиду полнейшей непортируемости вышенаписанного кода - тяжело говорить про расширение стандартного препроцессор для этого...


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 19.5.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Любитель
в С тоже нет шаблонов  smile 
а так подумаю на досуге над примером... реальным  smile 
кстати, если ты с make знаком, мне там очень нравятся функции типа
$(foreach)
...
можно было бы писать такое
Код

#list DIRS a, b, c, d, e, f, g
#foreach DIRS
        #include #__CURRENT__
#endeach

 smile 


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

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


Вселенский отказник
****


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

Репутация: 3
Всего: 43



Цитата

можно было бы писать такое
 А мне кажестся, что на уровне синтаксиса это было бы удобнее $)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Mayk
Дата 19.5.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

Репутация: 45
Всего: 134



Цитата(Любитель @  19.5.2007,  18:02 Найти цитируемый пост)

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

В G++  схожая техника используется для  эмуляции Variadic Templates(google).  

Цитата(/usr/include/c++/4.0/tr1/tuple)

.....
#define _SHORT_REPEAT
#define _GLIBCXX_REPEAT_HEADER <tr1/tuple_iterate.h>
#include <tr1/repeat.h>
#undef _GLIBCXX_REPEAT_HEADER
#undef _SHORT_REPEAT


А вот самое интересное:
Цитата(/usr/include/c++/4.0/tr1/tuple_iterate.h)

.....
/// @brief class tuple_size
template<_GLIBCXX_TEMPLATE_PARAMS>
  struct tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> >
  { static const int value = _GLIBCXX_NUM_ARGS; };


По топику --- для генерации сложных хедеров использую питон.


Это сообщение отредактировал(а) Mayk - 19.5.2007, 17:34


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
bsa
Дата 19.5.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(MAKCim @ 19.5.2007,  16:42)
Любитель
в С тоже нет шаблонов  smile 
а так подумаю на досуге над примером... реальным  smile 
кстати, если ты с make знаком, мне там очень нравятся функции типа
$(foreach)
...
можно было бы писать такое
Код

#list DIRS a, b, c, d, e, f, g
#foreach DIRS
        #include #__CURRENT__
#endeach

 smile

Ужас! Я на 100% уверен, найдется "профессионал", который сделает определение DIR в одном месте, а подобное использование в другом. Вот обрадуются же те, кто отлаживать возьмется (модифицировать)... smile 
PM   Вверх
JackYF
Дата 20.5.2007, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Jcs @  18.5.2007,  10:55 Найти цитируемый пост)
но они не обеспечивают возможность перечисления членов структуры


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



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Hurricane
Дата 20.5.2007, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 6
Всего: 9



Цитата(JackYF @  19.5.2007,  17:51 Найти цитируемый пост)
Кстати, вот одна из нескольких дельных мыслей. Мне несколько раз этой возможности не хватало. Как замутить такое - не нашел, и сам не придумал. Можно ли?
Компилятор ведь умеет, когда составляет конструктор копирования по-умолчанию.


Что будем перечислять для public, protected, private мемберов наследуемого класса в С++? Я бы понял, если бы это делал компилятор (конструкция языка), но препроцессор... Или препроцессор должен знать правила доступа для разных типов наследования? Или для С должен быть другой препроцессор?

Насчет foreach. В С/С++ нет контейнеров как интегральных типов данных _языка_. Они реализованы на уровне библиотек (boost, stl  и т.д.), и библиотеки поддерживают foreach (или for_each). Я не понимаю, почему это должно поддерживаться на уровне компилятора (для языка) или препроцессора. Вариант с {...in list} - это тоже частный случай контейнера, он должен каким-то образом создаться. Для каких типов данных? Это должен решать программист или препроцессор?

Сравните с Perl, где тип контейнеров - часть языка.

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


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


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

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



Hurricane
про что ты говоришь, и что я написал  smile 


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

PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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