关于内核ISO C90 forbids mixed declarations and code的警告

昨天有朋友问,如何去掉linux内核编译时出现的“ISO C90 forbids mixed declarations and code”警告。出现这个警告的原因,主要是因为执行了方法之后又出现了变量的定义:

int a = 0;
printk(" a = %d\n", a);
int b = 0;

在C89(90)标准中,不支持这类写法,将b的定义,写到prink之前即可。

这个问题实际是个仁者见仁智者见智的问题,没有绝对的对与错:有人说C89的定义更好,而有人说C99都推出那么多年,标准做这样的改动一定是要更合理了。呵呵,反正老刘也不好说什么,我建议还是遵从内核中大多数开发者的意见,将变量定义写在一起,当某个变量不需要时,删起来也容易不是。这是一个讨论帖:http://www.gossamer-threads.com/lists/linux/kernel/1132941

如果你就喜欢C99的风格,又不想看到警告,那么干脆,满足自己的欲望,直接将kernel下Makefile中的Wdeclaration-after-statement删掉!(老刘可不提倡!)

# warn about C99 declaration after statement
KBUILD_CFLAGS += $(call cc-option, -Wdeclaration-after-statement,)

    类似的问题其实还有个80线的问题,也是备受争议,现在的显示屏幕分辩率这么高,为什么还要坚持80线呢?老刘现在偶尔写写Java代码,用Idea开发环境,它的默认提示线就是120列。看看国外的驱动代码,基本上仍然遵循着80线,但国人写的驱动代码,就多少列的都有了。不过,老刘还是觉得人家的代码更漂亮,所以,老刘写驱动也一直遵循着传统的标准~。

关于内核ISO C90 forbids mixed declarations and code的警告》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5,482 views 1条评论