C语言使用全局常量
示例
标头可用于声明全局使用的只读资源,例如字符串表。
在单独的标头中声明这些标头,该标头将包含在任何要使用它们的文件中(“翻译单元”)。使用相同的标头声明一个相关的枚举来标识所有字符串资源很方便:
resources.h:
#ifndef RESOURCES_H#define RESOURCES_H
typedef enum { /* Define a type describing the possible valid resource IDs. */
RESOURCE_UNDEFINED = -1, /* To be used to initialise any EnumResourceID typed variable to be
marked as "not in use", "not in list", "undefined", wtf.
Will say un-initialised on application level, not on language level. Initialised uninitialised, so to say ;-)
Its like NULL for pointers ;-)*/
RESOURCE_UNKNOWN = 0, /* To be used if the application uses some resource ID,
for which we do not have a table entry defined, a fall back in
case we _need_ to display something, but do not find anything
appropriate. */
/* The following identify the resources we have defined: */
RESOURCE_OK,
RESOURCE_CANCEL,
RESOURCE_ABORT,
/* Insert more here. */
RESOURCE_MAX /* The maximum number of resources defined. */
} EnumResourceID;
extern const char * const resources[RESOURCE_MAX]; /* Declare, promise to anybody who includes
this, that at linkage-time this symbol will be around.
The 1st const guarantees the strings will not change,
the 2nd const guarantees the string-table entries
will never suddenly point somewhere else as set during
initialisation. */
#endif
为了实际定义资源,创建了一个相关的.c文件,这是另一个翻译单元,其中包含相关标头(.h)文件中声明的内容的实际实例:
resources.c:
#include "resources.h" /* To make sure clashes between declaration and definition arerecognised by the compiler include the declaring header into
the implementing, defining translation unit (.c file).
/* Define the resources. Keep the promise made in resources.h. */
const char * const resources[RESOURCE_MAX] = {
"<unknown>",
"OK",
"Cancel",
"Abort"
};
使用此程序的程序可能如下所示:
main.c:
#include <stdlib.h> /* for EXIT_SUCCESS */#include <stdio.h>
#include "resources.h"
int main(void)
{
EnumResourceID resource_id = RESOURCE_UNDEFINED;
while ((++resource_id) < RESOURCE_MAX)
{
printf("resource ID: %d, resource: '%s'\n", resource_id, resources[resource_id]);
}
return EXIT_SUCCESS;
}
使用GCC编译上面的三个文件,并将其链接为程序文件main,例如,使用以下命令:
gcc -Wall -Wextra -pedantic -Wconversion -g main.cresources.c -o main
(使用它们-Wall -Wextra -pedantic -Wconversion可以使编译器真正变得挑剔,因此在将代码发布到SO之前,您不会错过任何东西,可以说是个不错的选择,甚至值得将其部署到生产环境中)
运行创建的程序:
$ ./main
得到:
resource ID: 0, resource: '<unknown>'resource ID: 1, resource: 'OK'
resource ID: 2, resource: 'Cancel'
resource ID: 3, resource: 'Abort'
以上是 C语言使用全局常量 的全部内容, 来源链接: utcz.com/z/334593.html