将 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中。
所以,正如标题所说,我应该在主文件中定义一个类型,然后以某种方式将其传递给 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中。