如果在堆栈上分配结构则发出警告

时间:2015-10-12 15:51:22

标签: c api stack abi

我正在将通常在堆栈上使用的现有结构更改为不能在堆栈上使用的结构。在此过渡阶段,有没有办法通过警告或编译指示通知用户不在堆栈上分配结构?

例如

struct mytype {
    int var;
}
struct mytype *newType_alloc() {
    return malloc(sizeof(mytype));
}
void main(void)
{
    struct mytype oldWay;
    struct mytype *newWay = newType_alloc();
}

我希望gcc或clang会警告我,我在堆栈上创建oldWay而不使用其分配器(newType_alloc())。

基本原理是向newType添加字段会破坏ABI,这需要更改。

感谢

1 个答案:

答案 0 :(得分:0)

听起来像从用户界面中移除结构定义(即用户头文件)会做出你想要的事情,提醒用户以“旧方式”声明结构。不会编译。

也就是说,您目前正在实施重大API更改。因此,任何更新到新API的人都应该了解这些更改。