Передача определенного типа в main в заголовок в C

Итак, как говорится в названии, я должен определить тип в основном файле и каким-то образом передать его заголовку. Я пытался это сделать, но у меня нет идей.

Я определяю его так: «typedef int DATA»; и использовать его в заголовке как тип данных.

Я попытался вставить typedef перед включением заголовка, но все же он не распознается.

Есть идеи? Или это невозможно сделать таким образом?

#include  #include  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 

заголовок

 ||=== 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 int DATA; в PriorityQueue.h перед struct priorityQueue и убедитесь, что PriorityQueue.h включен в PriorityQueue.c.

Обычно вы не должны этого делать, но при условии, что у вас есть все основания для этого, он работает, если вы поместите typedef перед включением. Я не знаю, как вы его протестировали, но это работает нормально для меня.

$ cat header.h

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

$ cat main.c

 typedef int MYDATA; #include "header.h" int main (int argc, char **argv) { MYSTRUCT s = {0, 1}; sa = 1; s.b++; return 0; } 

Он компилируется без предупреждения и выполняет его с помощью gdb. Я вижу правильно определенные типы.