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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2013, 21:26   #11
qwertyk
Пользователь
 
Регистрация: 15.07.2009
Сообщений: 52
По умолчанию

Код:
#define qwe(x) {#x; x##1##2##3;}
................................................................
char *ch;
ch=qwe(0);//E2188 Expression syntax
................................................................
Хочу чтобы вывел строку "0123", но показывает ошибку почему?
qwertyk вне форума Ответить с цитированием
Старый 07.02.2013, 23:18   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

и не удивительно, вы вместо своего макроса подставьте результат его выполнения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.02.2013, 01:00   #13
qwertyk
Пользователь
 
Регистрация: 15.07.2009
Сообщений: 52
По умолчанию

Вот так работает:
Код:
#define qwe(x)  #x##"1"##"2"##"3"
Можно еще и так записать:
Код:
#define qwe_(n) #n
#define qwe(x)  qwe_(x)##"1"##"2"##"3"
По скорости они разное время будут выполнять или нет?
qwertyk вне форума Ответить с цитированием
Старый 08.02.2013, 01:26   #14
qwertyk
Пользователь
 
Регистрация: 15.07.2009
Сообщений: 52
По умолчанию

Код:
#define B8(x)     ((x&128)?"1":"0")\
                 ##((x&64)?"1":"0")\
                 ##((x&32)?"1":"0")\
                 ##((x&16)?"1":"0")\
                 ##((x&8)?"1":"0")\
                 ##((x&4)?"1":"0")\
                 ##((x&2)?"1":"0")\
                 ##((x&1)?"1":"0")
..........................................................
char *ch;
ch=В8(3);//E2314 Call of nonfunction,
..........................................................
Макрос должен переводить из 10-ой в 2-ую систему исчисления. Но не работает, пишет ошибку как это исправить?
qwertyk вне форума Ответить с цитированием
Старый 08.02.2013, 04:33   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы не знаете разницу между char и char*?

+ компилятор думаю вполне ясно пишет ошибку.
Цитата:
По скорости они разное время будут выполнять или нет?
макросы раскрываются во время компиляции, а не во время выполнения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.02.2013, 04:55   #16
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы не знаете разницу между char и char*?

+ компилятор думаю вполне ясно пишет ошибку.макросы раскрываются во время компиляции, а не во время выполнения.
Во время препроцессинга, не?
_Bers вне форума Ответить с цитированием
Старый 08.02.2013, 08:09   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Во время препроцессинга, не?
компиляция его включает.

но решил не углубляться.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.02.2013, 11:51   #18
qwertyk
Пользователь
 
Регистрация: 15.07.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы не знаете разницу между char и char*?
Знаю, мне как раз нужно массив char'ов вывести.
Цитата:
+ компилятор думаю вполне ясно пишет ошибку.
Смысл вашего сообщения? Если мне было бы понятно я не стал бы сюда писать!
qwertyk вне форума Ответить с цитированием
Старый 08.02.2013, 16:15   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

макрос позволяет получить значение типа unsigned char(можно сказать значение байта), введя бинарное число, в строку оно не переводит.
так вам никто не мешает перевести с помощью itoa.

+ константную строку вам никто не мешает ввести сразу.

ТС, подучите разницу между переменной, указателем, массивами(и строками тож)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный код artem611 Помощь студентам 2 11.04.2012 00:43
C# непонятный код raok Помощь студентам 4 21.05.2011 14:15
Непонятный код. Вадим Буренков Общие вопросы Delphi 9 18.08.2010 17:15
непонятный код Kostua Помощь студентам 5 27.04.2008 18:17