很多编码人员习惯于在单行注释时使用双斜线(//),因为输入方便。
不过VxWorks的开发人员可能就会遇到一个问题了
上图是在Workbench的DKM工程里添加一个c文件,该文件中只包含一个双斜线,编译工程就报错了:expected identifier or '(' before '/' token 在Tornado里,也会遇到类似的问题。这是为什么呢? 因为这个工程中,IDE使用的编译器是gnu,编译规则默认包含了-ansi
从gnu的手册中,可以看到-ansi等同于-std=c89,而c89那个年代,是不支持双斜线的
问题找到了,怎么解决呢?最简单粗暴的办法就是 -- 删了它!
再编译一下试试
搞定了!
荆溪惠子鬓鬅鬙,义理钻研到粹精。只是搞定还不行,我们还要知道为什么搞定。继续看手册
原来删除-ansi后,IDE就会将规则重置为-std=gnu89,而正是gnu89对c89做了一些扩展,其中就包含了这个双斜线注释。 那我们直接将规则设置为gnu89,甚至c99、gnu99之类的呢?
试一下,都没有问题。 不过,毕竟和c89相比,c99的变化太多,编译规则改动太大,可能会涉及到代码移植或兼容的问题,这就需要项目经理或技术负责人来统筹定制规则了。事实上很多公司都会制定自己的编码规范,其中就会包括注释的书写规则。因此我们这里就先使用gnu89吧。 刚刚验证的是DKM工程,我们再打开VIP看看。VIP中的ansi选项是用单选框形式提供的,那怎么修改呢?
直接在User Flags里填写就可以了。
这就是gnu编译器编译双斜线注释的问题。 提到gnu编译器,你是不是又想到一种办法?对,就是用diab编译器来编译工程。
试一下,果然没问题。难道diab默认没有使用ansi选项?看一下Build Console,它用的选项是-Xansi
这是什么鬼?看看diab手册,-Xansi的全称是-Xdialect-ansi。原来是厂家专门做的改进,就像是gnu89对c89的改进。
看看它改进了哪些,果然有这一条
好,到此为止,都搞定了! 这正是: 编译工具规则多,代码注释有风格。 便捷兼容孰取舍,统筹全局细斟酌。