C:重新定义“结构”

W.d*_*oui 3 c struct

我在重新定义结构体时遇到了麻烦。为了解释我的问题,我将考虑 4 个文件。

  • 接口.c
  • 解析器.h
  • 身份验证文件
  • 信息.h

接口.c

    #include "Auth.h"
    #include "Info.h"

/* some code here */
Run Code Online (Sandbox Code Playgroud)

解析器.h

struct ParsedAuthResponse {
   char *name;
   char *key;
};

struct ParsedInfoResponse {
   char *name;
   char *message;
};
void auth_parser(char* serverResponse,struct ParsedAuthResponse *response_a);
void scrobble_parser(char* serverResponse, int* scrobbleParsedparsedResponse);
void love_unlove_parser(char* serverResponse, int* loveUnloveParsedResponse);
void getInfo_parser(char* serverResponse,struct ParsedInfoResponse *responseP);
Run Code Online (Sandbox Code Playgroud)

身份验证文件

#include "parser.h"
functionX(int a, struct ParsedAuthResponse *response);
/* some code here */
Run Code Online (Sandbox Code Playgroud)

信息.h

#include "parser.h"
functionY(int a, struct ParsedInfoResponse *response);
/* some code here */
Run Code Online (Sandbox Code Playgroud)

当我在 Interface.c 中不包含 Info.h 或 Auth.h 时,没有问题。

Tim*_*Tim 7

您需要添加一个保护以防止 Parser.h 被包含两次,如下所示:

#ifndef PARSER_H
#define PARSER_H
struct ParsedAuthResponse {
   char *name;
   char *key;
};

struct ParsedInfoResponse {
   char *name;
   char *message;
};
void auth_parser(char* serverResponse,struct ParsedAuthResponse *response_a);
void scrobble_parser(char* serverResponse, int* scrobbleParsedparsedResponse);
void love_unlove_parser(char* serverResponse, int* loveUnloveParsedResponse);
void getInfo_parser(char* serverResponse,struct ParsedInfoResponse *responseP);
#endif
Run Code Online (Sandbox Code Playgroud)

因为每次编写指令时#include "Parser.h",Parser.h 的内容都会简单地复制粘贴到包含位置。这意味着您将同时声明两个结构。

使用ifndef可以防止它被多次复制粘贴。