Я работаю над некоторыми учебниками openGL, и поскольку у них есть синтаксис C++, мне нужно преобразовать их в синтаксис C, и у меня есть некоторые проблемы с глобальными переменными.Инициализация глобальной переменной работает с целым литералом, но не с переменной типа const
Так у меня extern
заявления в общий заголовок LUtil.h
#ifndef LUTIL_H
#define LUTIL_H
#include "LOpenGL.h"
#include <stdio.h>
#include <stdbool.h>
//Color modes
extern const int COLOR_MODE_CYAN;
extern const int COLOR_MODE_MULTI;
//Screen constants
extern const int SCREEN_WIDTH;
extern const int SCREEN_HEIGHT;
extern const int SCREEN_FPS;
extern int gColorMode;
extern GLfloat gProjectionScale;
...
И у меня есть файл LUtil.c, в котором декларация происходит
#include "LUtil.h"
//The current color rendering mode
const int COLOR_MODE_CYAN = 0;
const int COLOR_MODE_MULTI = 1;
//constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_FPS = 60;
//The projection scale
int gColorMode = 0;
GLfloat gProjectionScale = 1.f;
...
Теперь, если я составляю, как это оно работает. Но если я инициализировать константу gColorMode, как это в LUtil.c
int gColorMode = COLOR_MODE_CYAN;
Я получаю ошибку компилятора о том, что мой инициализатор не является постоянным, несмотря на то объявили COLOR_MODE_CYAN
const
и инициализации с ним.
Почему это?
Не используйте магическое число это код (ну есть исключения). FYI: «буквальная константа» (я бы тоже предпочел это) - это нестандартный термин. В стандарте используется константа [_ (integer) constant_] (http://port70.net/~nsz/c/c11/n1570.html#6.4.4). Это само по себе показывает, что C не имеет истинных констант (и C++ имеет своего рода химеру только на самом деле). – Olaf
@Olaf Спасибо, сэр, как упоминалось в 6.4.4, обновляя мой ответ сейчас. :-) –
Не нужно обновлять на самом деле, это было хорошо для меня уже. (Я просто пытаюсь добавить некоторый фон - не могу не сделать этого :-) – Olaf