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 are

                          recognised 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

回到顶部