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)
我想将它用作不同文件需要访问它的全局数组.所以我尝试过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)
除了声明array_u为extern,您还需要定义变量.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_u中memory.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)