постоянные значения в C - PullRequest
       0

постоянные значения в C

4 голосов
/ 21 апреля 2011

Этот код не компилируется:

const int x = 123;
const int y = x;

Он жалуется, что "элемент инициализатора не является константой" для строки y =.По сути, я хочу иметь два константных значения, одно из которых определяется в терминах другого.Есть ли способ сделать это в C или мне нужно использовать небезопасный тип #defines или просто записать значения буквально как магические числа?

Ответы [ 6 ]

8 голосов
/ 21 апреля 2011

При назначении типа const вы можете назначать только литералы, например: 1, 2, 'a', 'b' и т. Д., А не такие переменные, как int x, float y, const int z и т. Д. Переменные, несмотря на то, что вашпеременная на самом деле не является переменной (так как она не может измениться) не допускается.Вместо этого вы должны сделать:

const int x = 123;
const int y = 123;

или

#define x 123
const int y = 123;

Второй работает, потому что компилятор будет разбрасывать везде, где есть x, и заменять его литералом перед компиляцией.

3 голосов
/ 21 апреля 2011

Вы можете использовать enum для достижения этой цели:

enum { x = 123, y = x };

(x и y набираются в этом случае).

1 голос
/ 21 апреля 2011

c поддерживает только литералы или другие элементы, известные при компиляции, которые нельзя изменить.

0 голосов
/ 21 апреля 2011

Ваш y не является константой в понимании C, но const квалифицированная переменная .

Скомпилируйте выражения постоянной времени, так как вы хотите их использовать, может содержать:

  1. Литералы
  2. enum константы
  3. sizeof выражения
  4. адресные выражения, относящиеся к функциям
  5. адресные выражения, относящиеся к объектам сстатическая длительность хранения

и может комбинировать их в основном свободно с обычной арифметикой, при условии, что результирующий тип совместим с типом левой части.

0 голосов
/ 21 апреля 2011

C поддерживает только литералы в качестве инициализаторов const. Таким образом, вам придется использовать какое-то значение для инициализации вашего const, вы не можете сделать это с точки зрения других переменных, которые сами являются const.

Однако возникает еще один важный вопрос. Константность переменной «const» известна компилятору во время компиляции, так почему эта конструкция не разрешена? ... Могут ли некоторые эксперты C прокомментировать это?

0 голосов
/ 21 апреля 2011

C поддерживает только литералы в качестве инициализаторов const.Вы не можете инициализировать const с переменной.

Но C поддерживает

#define x 100

const int y = x;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...