Есть ли способ использовать константные переменные в определениях других констант? - PullRequest
4 голосов
/ 27 апреля 2009

Я хотел бы использовать некоторые ранее определенные константы в определении новой константы, но моему компилятору C это не нравится:

const int a = 1;
const int b = 2;
const int c = a;         // error: initializer element is not constant
const int sum = (a + b); // error: initializer element is not constant

Есть ли способ определить константу, используя значения других констант? Если нет, то в чем причина такого поведения?

Ответы [ 4 ]

7 голосов
/ 28 апреля 2009

Const vars нельзя определить как выражение.

#define A (1)
#define B (2)
#define C (A + B)

const int a = A;
const int b = B;
const int c = C;
7 голосов
/ 28 апреля 2009

Используйте перечисления в предпочтении перед макросами препроцессора для целочисленных значений const:

enum {
    A = 1,
    B = 2
};

const int a = A;
const int b = B;
const int c = A;        
const int sum = (A + B);

Работает на C и C ++.

2 голосов
/ 28 апреля 2009

Поскольку результаты должны быть постоянными, я согласен с Майклом Берром в том, что перечисления - это способ сделать это, но если вам не нужно передавать указатели на постоянные целые числа, я бы не использовал «переменные» (это константа действительно переменная?) но только перечисления:

enum { a = 1 };
enum { b = 2 };
enum { c = a };
enum { sum = a + b };
2 голосов
/ 28 апреля 2009

Вы можете присвоить литерал только переменной const, поэтому программа является недопустимой. Я думаю, что вы должны пойти с препроцессором.

...