我正在尝试使用不同版本的cc在两台不同的机器上编译相同的C文件.
gcc版本3.2.3说 warning: 'foo' was declared implicitly 'extern' and later 'static'
gcc版本4.1.2说 error: static declaration of 'foo' follows non-static declaration
两者都有相同的CFLAGS.我想让gcc 4.1.2表现得像gcc 3.2.3,也就是说,找到一个可以将这个错误变成一个警告的选项.
hlo*_*dal 29
从错误消息抱怨,听起来你应该尝试修复源代码.编译器抱怨声明的差异,例如类似
void foo(int i);
...
void foo(double d) {
...
}
Run Code Online (Sandbox Code Playgroud)
这不是有效的C代码,因此编译器抱怨.
也许你的问题是当第一次使用该函数时没有可用的原型,并且编译器隐式地创建了一个不是静态的.如果是这样,解决方案是在首次使用之前在某处添加原型.
虽然gcc 3.2.3对这个问题更加宽容,但gcc 4.1.2强调了以后链接程序时可能存在的严重问题.而不是试图压制错误,你应该使前向声明匹配函数声明.
如果您希望函数全局可用(根据前向声明),则不要随后将其声明为静态.同样,如果它缩进为本地范围,则使前向声明静态匹配.
试试-Wno-traditional。
但更好的是,为您的静态函数添加声明:
static void foo (void);
// ... somewhere in code
foo ();
static void foo ()
{
// do sth
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112845 次 |
| 最近记录: |