1

我试图在 c 中动态分配一个全局结构,但是有些东西使我的 c 文件无法找到对 extern 变量的引用。

日志:

main.c:18: undefined reference to `gate_array'

外部文件

#ifndef EXTERN_H_
#define EXTERN_H_


typedef struct gate_struct {
    int out;
} gate;

extern gate *gate_array;


#endif /* EXTERN_H_ */

主.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "extern.h"

int main(int argc, char *argv[]){

    gate_array = (gate*) malloc (2* sizeof(gate));

    return 0;
} 

谢谢!

4

3 回答 3

3

gate_array由于没有定义extern。在这种情况下,您可以删除extern限定符。但是,如果extern.h在多个翻译单元中使用(#include在多个.c文件中),那么这种方法会导致多个定义错误。考虑添加另一个.c包含gate_array(和任何未来变量)定义的文件,确保gate_array.

extern gate *gate_array告诉编译器有一个名为 的变量,gate_array但它是在其他地方定义的。gate_array但是发布的代码中没有定义。


另外,您可能希望阅读 Do I cast the result of malloc?

于 2012-05-30T10:53:21.980 回答
1

这可能是你的意思:

#ifndef EXTERN_H_
#define EXTERN_H_


typedef struct gate_struct {
    int out;
} gate;

typedef gate *gate_array;


#endif /* EXTERN_H_ */

typedefs gate *gate_array. 然后在main.c你想要做的事情:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "extern.h"

int main(int argc, char *argv[]){

    gate_array name_of_array = malloc (2* sizeof(gate));
    free(name_of_array);

    return 0;
} 

以前您缺少一个变量名。此外,malloc.

于 2012-05-30T10:55:59.037 回答
0

指向门的指针 iegate_array没有声明 typedef 所以你正在做这样的事情:

typedef int *IXX;
IXX = (int*) malloc(2*sizeof(int));

做这样的事情:

IXX ix = (int*) malloc(2*sizeof(int));
于 2017-07-28T06:00:33.557 回答