qemu源码编辑注意事项—暨HACKING文档翻译

本文介绍了QEMU源码编辑的注意事项,包括预处理器宏的使用,如C99语法的DPRINTF;C类型的选择,如常量类型、指针类型和类型定义;内存管理和字符串操作的规范;以及printf风格函数的处理。同时,强调遵循C99标准,避免未定义或实现定义的行为,并详细说明了错误处理和报告的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 预处理器


1.1. 变体宏


对于变体宏来说,坚持使用类似C99的语法:


#define DPRINTF(fmt, ...)                                       \
    do { printf("IRQ: " fmt, ## __VA_ARGS__); } while (0)


1.2. include指令


按照顺序的include指令使用如下:


#include "qemu/osdep.h"  /* Always first... */
#include <...>           /* then system headers... */
#include "..."           /* and finally QEMU headers. */


"qemu/osdep.h"包含预处理器宏,这些宏影响核心的系统头文件,比如<stdint.h>。该头文件必须第一个被include,以使被其他函数库所引用的核心系统头文件可以得到正确的qemu依赖的预处理宏。


不要在.h文件中include “qemu/osdep.h”,因为.c文件中已经include了。


2. C 类型


关于使用正确的数据类型,已经有一些共识存在,我们也在这里收集了一些有用的指导。


2.1. 常量类型


如果你正在使用"int"或者"long",无符号数是一个很好的类型。如果一个变量是一个计数器,它应该是一个unsigned类型。


如果变量是memory-size相关的,size_t应该是一个很好的选择(没有特殊要求只使用ssize_t)。客户机RAM内存偏移的表示使用ram_addr_t,但是只是限于RAM,该类型可能不会覆盖整个的客户机地址空间。


如果它是一个file-size相关的,使用off_t。
如果它是file_offset相关的,使用off_t。
如果它只包含小的数字,使用"unsigned int"(在除了嵌入式系统外,你能够假设这个类型至少4个字节长)。



如果你需要一个特殊宽度的类型,使用一个标准的类型,比如:int32_t, uint32_t, uint64_t等。这些特殊的类型被强制性包含进了VMState结构体中。


不要使用Linux内核的内部类型,比如:u32, __u32或 __le32。

客户机物理地址使用hwaddr(PCI地址使用pcibus_t&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值