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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] инициализация константы суммой других констант, неужели в си так нельзя? 
V
    Опции темы
null56
Дата 5.4.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 12



Всем привет
Задаю довольно глупый вопрос, знающих чистый язык Си.
Задача была объявить набор констант вычисляемых относительно друг друга, что - то типа
Код

const short a = 3;
const short b = a;

int main()
{
   return 0;
}

На что компилятор gcc мне ответил
Цитата

main.c:4:1: ошибка: элемент инициализатора не является константой


Вопрос: неужели в Си нельзя попросить вычислить такое выражение в runtime, не используя define?
Заранее благодарен за помощь

Добавлено через 10 минут и 37 секунд
название темы немного неудачно относительно содержимого
Код

const short a = 3;
const short b = 4;
const short c = a + b;

так понятнее чего хочу
PM MAIL   Вверх
boostcoder
Дата 5.4.2011, 14:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 20
Всего: 110



можно так:
Код

#include <stdio.h>

enum { a = 3 };
enum { b = a };
enum { c = a + b };

int main() {
   printf("%d", c);
   return 0;
}

http://liveworkspace.org/code/5d5da5743f16...272546ec036585b

насколько я знаю, в Си, константы не являются константами времени компиляции. возможно в расширении С99 это не так.

Добавлено через 1 минуту и 52 секунды
еще такой вариант записи:
Код

#include <stdio.h>

enum {
   a = 3,
   b = a,
   c = a+b
};

int main() {
   printf("%d", c);
   return 0;
}

http://liveworkspace.org/code/07a21ecc1b36...fe36c8cc005bb53
PM WWW   Вверх
null56
Дата 5.4.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 12



так вот расширение скорее всего у меня работает, ибо я вовсю юзаю inline функции, а они как раз, вроде были добавлены в расширение c99
для верности, сейчас попробовал собрать явно с расширением
Цитата

gcc main.c -std=c99

... хрен

ну нельзя, значит нельзя, спасибо, буду знать такие тонкости

Добавлено через 3 минуты и 52 секунды
вот вырезка из вики
Цитата

В Си++ константы и всё, с ними связанное, получило религиозный статус с приходом классов. Но этого мы сейчас касаться не будем. Сейчас мы разберёмся, чем отличаются константы Си++ от констант Си.

…А главное отличие — их теперь можно использовать! Например, можно написать так:

const int N = 10;
int A [N];

Возможно, вы не поверите, но в Си этого сделать было нельзя. Хотя значение N известно во время компиляции, но в Си компилятор «закрывал на это глаза». (Безусловно, у них были свои причины на это, для интересующихся — причины зовут «extern», но всё равно получилось не очень хорошо.)


может быть это и есть ответ на мой вопрос...
если есть кому что добавить, отпишись, а так тема закрыта
PM MAIL   Вверх
mes
Дата 5.4.2011, 15:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(null56 @  5.4.2011,  13:56 Найти цитируемый пост)
Например, можно написать так:

это насилие над логикой наконец то в C++0x разгружено появлением constexpr..



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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