![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
макрос и так разворачивается в том месте где используется.
или в чем вопрос? |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
вопрос в том, где компилятор C ожидает константу.
Это: enum, размер объявляемых массивов и инитиалайзер глобальных переменных (только C). Вопрос в том, как в выражении проверить, является ли оно константой на момент компиляции. Я, кажется, сам догадался: можно в макросе кастануть NULL в указатель на массив размером равным выражению. Это сообщение отредактировал(а) leniviy - 4.9.2012, 15:11 |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
отключить VLA, и проверяемую переменную использовать в качестве размера массива.
Добавлено через 5 минут и 44 секунды http://liveworkspace.org/code/cb044871679c...507a0309c598f75 Добавлено через 7 минут и 47 секунд Variable length arrays Добавлено через 10 минут и 17 секунд вариант с использованием енума: http://liveworkspace.org/code/4632d103ad10...4f5786c88771204 Это сообщение отредактировал(а) boostcoder - 4.9.2012, 15:17 |
||||
|
|||||
| leniviy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Это не серьёзно. enum и typedef работают только в начале функции. Надо вот так:
Это сообщение отредактировал(а) leniviy - 4.9.2012, 18:05 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
они не могу работать. по определению. как понимать "в начале функции" ? |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
их можно объявить только в начале функции или блока.
Это сообщение отредактировал(а) leniviy - 4.9.2012, 16:15 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ах епс. так ты ж на сях кодишь
|
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Я не выбирал кодить на си. Кодить на си выбрало меня
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, педросы что-то вроде такого же говорят. типа: я в жопу трахаться не выбирал. в жопу траться выбрало меня.
незавидная учесть, однако Это сообщение отредактировал(а) boostcoder - 4.9.2012, 16:26 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Так добавь в макрос { } :
и можешь пользоваться почти где угодно. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
math64, так его макрос еще и возвращает значение.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Вряд ли ему этот побочный эффект на самом деле нужен. Если нужен, можно вручную присвоить переменной 0 или вставить его присвоениее в код макроса.
А если если не нужен - никакого кода не генерится. Но мoй код нельзя вставить между декларациями переменных. |
|||
|
||||
| leniviy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
VLA портят всю мою идею с кастом нуля в указатель на массив. Например, в gcc 4 этот код компилируется:
Но! Кастовать в енум тоже можно!
|
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
leniviy, расскажи плиз, в какой задаче понадобился такой изврат?
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |