任何用于处理“int i []”的gcc选项,如“int * i”?

时间:2018-05-19 00:55:52

标签: c gcc

较旧的C编译器似乎对空方括号更宽松。是否可以通过gcc(即使不符合标准)?我正在移植一个庞大的代码库。

void foo() {
    extern int i[]; /* gcc -c foo.c gives "incomplete type" error */
    int x;
    i=&x;  }

更新:我在上面的示例代码上犯了错误。 AnT提到i不是左值。仔细检查我的旧编译器会显示此代码无法在所有之后编译。抱歉混淆。

2 个答案:

答案 0 :(得分:3)

我不知道如何让gcc接受这样的代码 - 我建议的下一个最好的解决方案是看看你是否可以使用@Barmar建议的正则表达式替换(它应该相对容易检查结果,因为它目前没有编译);或者甚至可以尝试使用Coccinelle semantic patch来获得更安全的方法:

  

Coccinelle是一个程序匹配和转换引擎,它提供语言SmPL(语义补丁语言),用于指定C代码中所需的匹配和转换。

     

Coccinelle最初的目标是在Linux中执行附带进化。此类演变包括客户端代码响应库API中的演变所需的更改,并且可能包括修改,例如重命名函数,添加函数参数,其值以某种方式依赖于上下文,以及重新组织数据结构。

     

除了附带的进化,Coccinelle成功地(由我们和其他人)用于查找和修复系统代码中的错误。

答案 1 :(得分:2)

不,你不能,因为数组不是指针。在某些情况下,它可以像指针一样运行,但它不是指针。

相关问题