为什么CodeBlocks突出显示关键字类并进行编译而没有任何错误(我使用C语言编程)?

时间:2019-07-08 14:42:55

标签: c gcc codeblocks c99 c11

看了一些教程之后,我试图在c中创建一个类。

我在youtube上看到了有关类和对象的视频,代码是用Java编写的,但讲师说其他语言也是如此。我已经学习了一些C语言的基础知识。当我打开Code :: Blocks并键入“ class”时,它突出显示,然后我对其进行编译而没有任何错误。我知道C不是OOP语言,因此它不应该包含类。是的,该文件是.c文件。

 #include"stdio.h"
  void main(void)
  {
         int sa[5];
         printf("Size : %ld\n",sizeof(sa));
  }
  class;

编译时没有错误,但是有一些警告

warning: data definition has no type or storage class
warning: type defaults to ‘int’ in declaration of ‘class’ [-Wimplicit-int]|
||=== Build finished: 0 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

3 个答案:

答案 0 :(得分:1)

原因有两个,首先,由于某种原因,CodeBlocks突出显示了不是C中的关键字的单词,从而欺骗了您。其次,在C 2011中由C标准删除的古老的“隐式int”规则正在编译中您的class;int class;。我建议,如果您是入门者,则应在编译选项中加入-pedantic-errors -Wall,以免受到这种行为和其他类似行为的影响。

答案 1 :(得分:1)

  

我在youtube上看到了有关类和对象的视频,代码是用Java编写的   但是教练说其他语言也一样。

这对老师来说有点不负责任。 某些其他语言与Java的语法相似用于定义类-最著名的是C ++。另一方面,其他一些面向对象的语言具有完全不同的语法,有些甚至不使用“类”一词,更不用说具有这种拼写的关键字了。

  

我已经学习了一些C语言的基础知识。当我打开Code :: Blocks并键入“ class”时,它会突出显示

“类”不是C关键字,因此在C代码中将其突出显示为适得其反。如果那是Code :: Blocks所做的(对于.c文件),则将构成缺陷。但是,如果突出显示该单词作为标识符(变量名),那么它的行为就合理。

  

然后我编译它而没有任何错误。

...但是有一些警告,您稍后会提到:

  

警告:数据定义没有类型或存储类
  警告:在“ class”的声明中默认为“ int” [-Wimplicit-int]

这些告诉您代码的解释与预期不同。

两者是相关的。他们告诉您“类”被当作变量的标识符,而不是语言关键字。他们还告诉您,该标识符的类型已隐式分配为int,这是GCC和某些其他C编译器的兼容性功能。从C99开始,这样的声明在C中无效,并且如果使用严格的(er)-conformance编译选项,例如-std=c99,则编译器将拒绝它。

  

我知道C不是一种OOP语言,因此它不应该包含类。

包含类将是更合适的表达方式。但这并不意味着它将“阶级”一词视为应明确拒绝的东西。相反,这意味着“类”一词不被认为是任何特殊的东西。

答案 2 :(得分:0)

是正确的。您所用的class是具有class名称的变量的声明。由于未指定类型,因此默认为int。由于出现警告,IDE会突出显示此声明。