Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人知道为什么这个C代码赢了';不编译? #包括 int const NAMESIZE=40; int const ADDRSIZE=80; typedef char NameType[NAMESIZE]; typedef char AddrType[ADDRSIZE]; 类型定义结构 { 名称类型名称; 地址类型; 双薪; 无符号整数id; }复制型; int main(int*argc,char*argv[] { Emprestype雇员; 返回0; }_C - Fatal编程技术网

有人知道为什么这个C代码赢了';不编译? #包括 int const NAMESIZE=40; int const ADDRSIZE=80; typedef char NameType[NAMESIZE]; typedef char AddrType[ADDRSIZE]; 类型定义结构 { 名称类型名称; 地址类型; 双薪; 无符号整数id; }复制型; int main(int*argc,char*argv[] { Emprestype雇员; 返回0; }

有人知道为什么这个C代码赢了';不编译? #包括 int const NAMESIZE=40; int const ADDRSIZE=80; typedef char NameType[NAMESIZE]; typedef char AddrType[ADDRSIZE]; 类型定义结构 { 名称类型名称; 地址类型; 双薪; 无符号整数id; }复制型; int main(int*argc,char*argv[] { Emprestype雇员; 返回0; },c,C,如果我使用#define而不是const,它将编译。 这就是错误: employee.c:5:14:错误:在文件范围内对“NameType”进行了可变修改 employee.c:6:14:错误:在文件范围内可变地修改了“AddrType”这些常量声明,在c中,只是定义了一些只读内存,它们不是真正的常量。在运行时,它们不能被评估,对于数组声明来说太晚了。 < P> C和C++之间的区别之一是C++中的代码> const int < /Cord>对象是一个常量,即它可以用来形成常量表达式。另一方面,

如果我使用#define而不是const,它将编译。 这就是错误:

employee.c:5:14:错误:在文件范围内对“NameType”进行了可变修改
employee.c:6:14:错误:在文件范围内可变地修改了“AddrType”

这些常量声明,在c中,只是定义了一些只读内存,它们不是真正的常量。在运行时,它们不能被评估,对于数组声明来说太晚了。

< P> C和C++之间的区别之一是C++中的代码> const int < /Cord>对象是一个常量,即它可以用来形成常量表达式。另一方面,在C语言中,
const int
对象根本不是常量(它更像是“不可更改的变量”)

同时,C中文件作用域数组的数组大小必须是一个常量表达式,这就是为什么
const int
对象不能在该角色中工作的原因。(上述方法,BTW,您的代码将编译为完美的C++,但不会编译为C)< /P> 在C语言中,要定义命名常量,必须使用
#define
或枚举。在您的具体情况下,可以按如下方式进行

#include <stdio.h>
int const NAMESIZE = 40;
int const ADDRSIZE = 80;
typedef char NameType[NAMESIZE];
typedef char AddrType[ADDRSIZE];

typedef struct
{
    NameType name;
    AddrType address;
    double salary;
    unsigned int id;
}EmpRecType;

int main(int * argc, char * argv[])
{
    EmpRecType employee;
    return 0;
}

另外,如果用本地数组替换文件作用域数组,则C代码将按原样编译,即使用
const int
对象作为数组大小,因为现代C(ANSI C99)支持本地作用域中的可变长度数组(VLA)。(在这种情况下,您的阵列将是VLA)。在较旧版本的C(类似ANSI C89/90)中,即使本地数组也不编译代码。< /P>它会给出什么错误?是否应该是“代码> > const int <代码>,而不是<代码> int const <代码>?<代码> int const <代码>在C++中是有效的。我把它们调换了,但仍然无法编译。。我使用的是GCC4.5.3
#define NAMESIZE 40
#define ADDRSIZE 80