C90: Как глобально инициализировать эту структуру в C без расширений C99 - PullRequest
3 голосов
/ 08 июля 2011

Мне было интересно, как лучше всего инициализировать эту структуру с помощью C90, сохраняя при этом аккуратность.

В моем заголовочном файле назовите его test.h, у меня определена следующая структура:

 struct s_test_cfg{
      char *a[3];
      char *b[3];
      char *c[3];
 }

Затем я объявил ее как внешнюю структуру, чтобы я мог инициализировать ее глобально в файле .c:

 extern struct s_test_cfg test_cfg;

Теперь в моем файле .c я хочу иметь возможностьобъявить что-то подобное глобально (очевидно, то, что я собираюсь написать, не поддерживается в C90):

 struct s_test_cfg test_cfg =
 { .a = {"a", "b", "c"},\
   .b = {"d", "e", "f"},\
   .c = {"g", "h", "i"} };

Это, очевидно, делает его очень аккуратным и прозрачным в отношении того, что вы пытаетесь сделать.Как я могу инициализировать глобальную структуру в моем C-файле, которая также чиста, как этот синтаксис?Спасибо.

1 Ответ

8 голосов
/ 08 июля 2011
struct s_test_cfg test_cfg = {
    { "a", "b", "c" },  /* .a */
    { "d", "e", "f" },  /* .b */
    { "g", "h", "i" },  /* .c */
};

, пожалуй, самый чистый вариант (если не считать, что вы сами используете C99; GCC и Intel C оба поддерживают C99).

...