Как определить структуру из нескольких строк в нем? - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу определить структуру в заголовочном файле C, который содержит несколько строк.Например, ниже перечислены 3 файла и определен struct fileList.

#include <stdio.h>

#define FILE1 "/data/file1"
#define FILE2 "/data/file2"
#define FILE3 "/data/file3"

typedef struct fileList{
    FILE1;
    FILE2;
    FILE3;
}fileList;

int main()
{
    fileList fl;
    printf("Hello world! %s\n", fl.FILE1);

}

Но когда я его запустил, я получил следующие ошибки.Зачем?И у вас есть лучшее решение?Спасибо!

gcc test.c 
test.c:3:15: error: expected specifier-qualifier-list before string constant
 #define FILE1 "/data/file1"
               ^
test.c:8:5: note: in expansion of macro ‘FILE1’
     FILE1;
     ^
test.c: In function ‘main’:
test.c:3:15: error: expected identifier before string constant
 #define FILE1 "/data/file1"
               ^
test.c:16:36: note: in expansion of macro ‘FILE1’
     printf("Hello world! %s\n", fl.FILE1);

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

относительно:

typedef struct fileList{
    FILE1;
    FILE2;
    FILE3;
}fileList;

это не приводит к действительному элементу данных.Предложить:

struct fileList{
    char *FILE1;
    char *FILE2;
    char *FILE3;
};
typedef struct fileList  fileList;
0 голосов
/ 11 декабря 2018

Думайте о #define макросах как о чем-то, что ищется и заменяется.Если вы замените макросы их определениями, вы получите:

typedef struct fileList{
    "/data/file1";
    "/data/file2";
    "/data/file3";
}fileList;

и

printf("Hello world! %s\n", fl."/data/file1");

Эти фрагменты явно не синтаксически действительны.


Похоже,Вы пытаетесь создать структуру с тремя строковыми полями.Один из способов сделать это может быть:

typedef struct fileList {
    const char *file1;
    const char *file2;
    const char *file3;
} fileList;

Затем, если вы хотите создать экземпляр этой структуры и установить значения этих строковых полей в строковые литералы, которые вы перечислили, вымог написать:

int main() {
    fileList fl;
    fl.file1 = "/data/file1";
    fl.file2 = "/data/file2";
    fl.file3 = "/data/file3";
    printf("Hello world! %s\n", fl.file1);
}

Нет необходимости в макросах препроцессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...