Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
FaulzD
0 / 0 / 0
Регистрация: 18.10.2012
Сообщений: 3
#1

Сложный макрос - C++

18.10.2012, 21:34. Просмотров 416. Ответов 5
Метки нет (Все метки)

Создать макрос buffer(n) который резервирует в памяти буфер емкостью n байтов и
при каждом обращении выдает адрес очередного байта или NULL, если буфер исчерпан.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 21:34     Сложный макрос
Посмотрите здесь:

Не сложный вопросик!!! C++
Цикл сложный C++
C++ Не будет ли каша в голове ? Си\С++ сложный ?
C++ одновимерни массивы и сложный поиск
одномерные массивы и сложный поиск C++
Как правильно инициализировать сложный объект? C++
Если макрос на VBA переписать на С++, то макрос станет работать быстрее? C++
посоветуйте - сложный ли код C++
Сложный макрос C++
C++ Сохранить сложный объект в файл и потом загрузить его
C++ Слишком сложный код программы, ничего не понимаю(
Сложный калькулятор C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17387 / 5625 / 351
Регистрация: 30.03.2009
Сообщений: 15,407
Записей в блоге: 26
18.10.2012, 22:44     Сложный макрос #2
Если я правильно понял задание, то такое в чистом виде вроде бы как не реализуемо
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.10.2012, 10:16     Сложный макрос #3
Что-нибудь вроде.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
int current = 0;
char* chbuf = 0;
char* pptr = 0;
 
#define buffer(n) \
if (!current) \
{ \
   chbuf = new char[(n)]; \
} \
pptr = 0; \
if (current != (n)) \
{ \
   pptr = chbuf + current; \
} \
++current;
 
int main()
{
   buffer(3);
   std::cout << (void*)pptr  << std::endl;
   buffer(3);
   std::cout << (void*)pptr << std::endl;
   buffer(3);
   std::cout << (void*)pptr << std::endl;
   buffer(3);
   std::cout << (void*)pptr << std::endl;
   delete[] chbuf;
}
http://liveworkspace.org/code/dd49e5...38acf5e8aec5ca
Evg
Эксперт CАвтор FAQ
17387 / 5625 / 351
Регистрация: 30.03.2009
Сообщений: 15,407
Записей в блоге: 26
19.10.2012, 10:54     Сложный макрос #4
Цитата Сообщение от ForEveR Посмотреть сообщение
Что-нибудь вроде
По большому счёту это полная хрень, поскольку внутри макроса используются переменные, которые определены вне тела макроса. Т.е. вместо макроса по-нормальному надо написать функцию. Хотя идиот, который такую задачу придумал, наверное этого не понимает
OhMyGodSoLong
19.10.2012, 10:58
  #5

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Хотя идиот, который такую задачу придумал, наверное этого не понимает
Это просто макросы препроцессора C++ ущербны и не позволяют вводить переменные ^^

Evg
Эксперт CАвтор FAQ
17387 / 5625 / 351
Регистрация: 30.03.2009
Сообщений: 15,407
Записей в блоге: 26
19.10.2012, 11:56     Сложный макрос #6
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Это просто макросы препроцессора C++ ущербны и не позволяют вводить переменные ^^
Макрос к языку как таковому не относится (хотя является частью стандарта языка). Если бы в макросах были переменные, то это были бы переменные макроса, но не переменные языка
Yandex
Объявления
19.10.2012, 11:56     Сложный макрос
Ответ Создать тему
Опции темы

Текущее время: 09:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru