我正在通过一些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;
...
而且我在该声明发生
#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;
...
现在,如果我这样进行编译我的LUtil.c文件有用。但是,如果我在LUtil.c
int gColorMode = COLOR_MODE_CYAN;
初始化这样的gColorMode常量我得到一个编译错误,说我的初始化程序不可尽管已经宣布COLOR_MODE_CYAN
一个const
与它初始化不变。
这是为什么?
不要使用幻数是代码(好吧,有例外)。仅供参考:“字面常量”(我更喜欢这个)是一个非标准术语。该标准使用[_(integer)constant_](http://port70.net/~nsz/c/c11/n1570.html#6.4.4)。这仅仅表明C没有真正的常量(而C++实际上只有一种嵌合体)。 – Olaf
@Olaf谢谢你,先生,正如6.4.4中提到的,现在更新我的答案。 :-) –
实际上不需要更新,对我来说已经很好了。 (我只是想添加一些背景 - 不能这样做:-) – Olaf