如何在C中使用extern union数组?

Tim*_*gan 4 c arrays extern unions

我想使用类似于chux建议的联合数组

union {
  uint8_t u8[12];
  uint16_t u16[6];
} *array_u;

array_u = calloc(1, sizeof *array_u);
assert(array_u);

printf("array_u->u8[0] = %" PRIu8 "\n", array_u->u8[0]);

array_u->u16[0] = 1234;
printf("array_u->u16[0] = %" PRIu16 "\n", array_u->u16[0]);
...
Run Code Online (Sandbox Code Playgroud)

来源:可以将不同的数据类型存储在C中相同的已分配内存中吗?

我想将它用作不同文件需要访问它的全局数组.所以我尝试过globals.h:

extern union {
    uint8_t u8[12];
    uint16_t u16[6];
} *array_u;
Run Code Online (Sandbox Code Playgroud)

我想在这个文件中分配并释放它memory.c:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <stdlib.h>
#include "globals.h"

void allocate_array_u(void){
    array_u = calloc(1, sizeof *array_u);
}
Run Code Online (Sandbox Code Playgroud)

我很遗憾地收到了一个 error LNK2001: unresolved external symbol array_u

我该如何解决这个问题?

解决方案: 我忘了在main.c或中定义联合memory.c:

array_u_t *array_u;
Run Code Online (Sandbox Code Playgroud)

Zif*_*ion 7

除了声明array_uextern,您还需要定义变量.extern只是说要在其他地方找到定义.那个定义需要存在于某个地方.

请尝试以下方法.

改变globals.h如下:

typedef union {
    uint8_t u8[12];
    uint16_t u16[6];
} array_u_t;

extern array_u_t *array_u;
Run Code Online (Sandbox Code Playgroud)

定义array_umemory.c,如下所示:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <stdlib.h>
#include "globals.h"

array_u_t *array_u; // <---------------- definition

void allocate_array_u(void){
    array_u = calloc(1, sizeof *array_u);
}
Run Code Online (Sandbox Code Playgroud)