c – 转发声明的替代方案
我注意到,将类或struct关键字预先添加到另外需要转发的类型的类型中,就像该类型被转发为已声明一样:
// struct Test; forward declaration commented void* foo(struct Test* t) // C style function parameter - This works ! { return t; } 我没有意识到这一点.我不知道它是标准的C还是扩展名,以及参数之前的struct关键字是作为前向声明还是另一个机制启动. 此外,在这样的使用之后,“下一个”功能可以使用该类型而不预先添加任何关键字: void* oof(Test* t); Demo 解决方法
这是合法的,但可能不是一个好主意.
从[basic.scope.pdecl] / 6:
例如: namespace mine { struct T* foo(struct S *); // ^^^^^^^^^---------------- decl-specifier-seq // ^^^^^^^^^^--- parameter-declaration-clause } 这将T和S作为类名称和foo作为函数名称引入命名空间矿. 注意C中的行为是不同的;结构名称仅在函数的范围内有效.
gcc在C代码中给出了适用于此用法的警告: a.c:3:18: warning: ‘struct Test’ declared inside parameter list void* foo(struct Test* t) ^ a.c:3:18: warning: its scope is only this definition or declaration,which is probably not what you want (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |