有没有人有任何提示如何以系统方式处理大型程序中的符号常量和类型定义以避免头文件之间的循环依赖?我有一个想法,定义一个包含所有结构、联合和枚举类型定义的头文件和另一个包含所有符号常量定义的头文件。但是我对这个关于实现隐藏的解决方案有疑问。谢谢你的任何想法。
我用C语言实现了一个使用结构数组的队列.
typedef struct{
req_t buffer[BUFFER_SIZE]; // buffer
uint16_t size; // length of the queue
uint16_t count; // number of elements present in the queue
req_t *p_head; // pointer to head of the queue (read end)
req_t *p_tail; // pointer to tail of the queue (write end)
}circular_buffer_t;
void init_cb(circular_buffer_t *p_cb){
p_cb->p_head = p_cb->buffer;
p_cb->p_tail = p_cb->buffer;
p_cb->count = 0;
p_cb->size = BUFFER_SIZE;
}
Run Code Online (Sandbox Code Playgroud)
问题是上面给出的实现仅可用于存储req_t结构的实例.现在我需要存储另一个结构的实例,我不知道如何以更一般的方式定义队列,以便我能够为不同结构的实例使用相同的队列.问题是我需要在缓冲区定义之前知道结构类型.有人知道如何解决这个问题吗?
#ifndef CIRCULAR_BUFFER_H_
#define CIRCULAR_BUFFER_H_
#define BUFFER_SIZE 32
// macro creates variant of the queue for each …Run Code Online (Sandbox Code Playgroud) 我一直在用C++实现通信协议,我决定以下面给出的方式建模一个数据包.
union control_pkt_u{
struct pkt_parts_t{
uint8_t header[3]; // Control packet header
uint8_t payload[NO_PYLD_BYTES_IN_CONTROL_PACKET]; // Control packet payload
};
uint8_t pkt_array[NO_BYTES_IN_PACKET];
};
Run Code Online (Sandbox Code Playgroud)
只要我需要访问联合的元素
pkt.pkt_parts_t.header[0] = APP_MSG_DEB;
Run Code Online (Sandbox Code Playgroud)
我在编译期间收到错误:
invalid use of struct Manager::control_pkt_u::pkt_parts_t
Run Code Online (Sandbox Code Playgroud)
请任何人告诉我我做错了什么?