将 main 中定义的类型传递给 C 中的 header

Passing defined type in main to header in C

所以,正如标题所说,我应该在主文件中定义一个类型,然后以某种方式将其传递给 header。我试图以任何方式做到这一点,但我没有想法。

我这样定义它:"typedef int DATA;"并在header中使用它作为数据类型。

我尝试在包含 header 之前插入 typedef,但仍然无法识别。

有什么想法吗?或者这样根本做不到?

#include <stdio.h>
#include <stdlib.h>

typedef int DATA;

#include "PriorityQueue.h"

int main(){
    int priority;
    DATA value;

这是我主要的开始

#ifndef PRIORITY_QUEUE_H_
#define PRIORITY_QUEUE_H_

struct priorityQueue{
    int priority;
    DATA value;
    struct priorityQueue *next;
};
typedef struct priorityQueue LINK;

void createEmpty(LINK **head);
void add(LINK **head, int p, DATA v);
void deleteElement(LINK **head, int *p, DATA *v);
//void print(LINK *head);
void checkIfEmpty(LINK *head);
void destroy(LINK *head);
#endif

Header

||=== Build: Release in PriorityQueue (compiler: GNU GCC Compiler) ===|
~\PriorityQueue\PriorityQueue.h|6|error: unknown type name 'DATA'|
~\PriorityQueue\PriorityQueue.h|11|error: unknown type name 'DATA'| 
~\PriorityQueue\PriorityQueue.h|12|error: unknown type name 'DATA'| 
~\PriorityQueue\PriorityQueue.c|10|error: unknown type name 'DATA'| 
~\PriorityQueue\PriorityQueue.c|44|error: unknown type name 'DATA'| 
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 Used ~ instead of my destination

通常你不应该这样做,但假设你有充分的理由这样做,如果你将 typedef 放在包含之前,它就会起作用。我不知道你是如何测试它的,但这对我来说没问题。

$猫header.h

typedef struct 
{
  MYDATA a;
  MYDATA b;
} MYSTRUCT;

$猫main.c

typedef int MYDATA;
#include "header.h"

int main (int argc, char **argv)
{ 
 MYSTRUCT s = {0, 1};
 s.a = 1;
 s.b++;

 return 0;
}

它在没有警告的情况下编译并使用 gdb 执行它我看到正确定义的类型。

typedef int DATA;放在struct priorityQueue之前的PriorityQueue.h中,并确保PriorityQueue.h包含在PriorityQueue.c中。