看了一些教程之后,我试图在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)) ===|
答案 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会突出显示此声明。