我可以在 GPL-v3 下发布 RISC-V 实现(用 VHDL 或 Verilog 编写)吗?如果是这样,我必须给予什么额外的“信用”等?
RISC-V 站点上的 FAQ 说 ISA 规范是通过 BSD 许可证获得许可的,但是 BSD 许可证是专门讨论许可源代码和二进制文件的,所以我不明白他们是如何应用它的。
任何人都可以解释他们的许可是如何工作的,并指向我实际拥有许可的网站上的链接吗?
我目前正在开发一个项目,某个特定部分需要一个多行宏函数(据我所知,常规函数在这里不起作用)。
目标是创建一个堆栈操作宏,从堆栈中提取任意类型的数据(来自函数调用的内部堆栈,而不是高级“堆栈”数据类型)。如果它是一个函数,它看起来像这样:
type MY_MACRO_FUNC(void *ptr, type);
Run Code Online (Sandbox Code Playgroud)
type从堆栈中提取的数据类型在哪里。
我目前在我的平台(AVR)上有一个有效的实现:
#define MY_MACRO_FUNC(ptr, type) (*(type*)ptr); \
(ptr = /* Pointer arithmetic and other stuff here */)
Run Code Online (Sandbox Code Playgroud)
这允许我写一些类似的东西:
int i = MY_MACRO_FUNC(ptr, int);
Run Code Online (Sandbox Code Playgroud)
正如您在实现中所看到的,这是有效的,因为分配的语句i是宏中的第一行:(*(type*)ptr)。
然而,我真正想要的是能够在此之前有一个声明,以在任何内容被破坏之前验证它ptr是一个有效的指针。但是,这将导致宏通过int i =指向该指针检查来扩展。在标准 C 中有什么办法可以解决这个问题吗?谢谢你的帮助!