当前位置: 首页 > 知识库问答 >
问题:

"错误:在Solaris机器上使用SUN C编译时,不完整类型为"无符号char[]"

那开济
2023-03-14

我有一个无符号字符tmp[]的定义 作为结构的成员。

在Linux RedHat上使用G4进行编译时,它不会抱怨。但在Solaris 5.10机器上使用Sun C进行编译时,我遇到一个错误:

错误:在这个声明中tmp是一个不完整的类型无符号char[]

Sun C有什么编译选项可以让它编译吗?

我读过关于不完整类型的文章,我应该把它改成指针吗?这是有问题的,因为我有很多相同类型的定义。为什么汇编结果会有差异?


共有1个答案

能翔宇
2023-03-14

给定代码

struct
{
    ...,
    char tmp[];
};

tmp是一个灵活的数组成员。

这是一种C语言构造,直到C 14才在C中有效,但GCC支持它作为扩展。

Solaris Studio的最新版本通过-std=c14选项支持c14。

请注意,零长度数组,例如

struct
{
    ...,
    char tmp[ 0 ];
};

与灵活数组成员不同,并且您的Studio编译器版本可能不支持-features=zla选项。例如,Solaris Studio 12.2不支持它。

 类似资料:
  • 首先是一些背景。正如C 17标准所述: [vector.overview]/3如果分配器满足分配器完整性要求17.6,则在实例化vector时可使用不完整类型T。3.5.1.T应在引用向量的任何结果特化成员之前完成。 我在本回购协议中尝试了3种方案(代码复制在底部): 包含不完整向量类型的类在同一头文件中声明(默认ctor/dtor)并定义 编译用b. h包括: 编译用b. h包括: 我的问题是,

  • 我在Eclipse中编写代码,有如下内容: 但是,当我尝试构建时,会出现以下错误: 有什么想法吗?我在谷歌上搜索过,似乎大多数有这个问题的人根本没有包含正确的头文件,我相信我做得是正确的。

  • 当我提交代码时,我收到了这个错误。这仅发生在我在课程所需的在线编译器上提交代码时,但是,当我通过InteliJ运行我的代码时,它会正确编译。 主要的java:335:错误:在(!(TeamMember.contains(“Stop”)){^symbol:method contains(String)位置:类TeamMember 1错误时找不到符号 我的课程如下: 主要: 团队成员: }

  • 问题内容: 当代码到达递归调用增量时,我收到错误找不到符号,我不知道为什么?这是增量代码。任何帮助将不胜感激。 编辑:我真的是Java的新手,所以可以做的答案越基本越好。好的,所以我收到的错误是:BigNatural.java.35:找不到符号符号方法增量()位置:类java.lang.String temp.increment() 并在此处清除所有其他问题,是整个代码。 }公共类BigNatur

  • 我试图整理一系列的意大利面条代码从Arduino项目处理wifi, mqtt和SPIFF存储配置和我发现的最简单的解决方案是有一个基类,其中包含指向子类的指针,每个子类都有指向父类的指针类,并在需要时可以调用基类及其指向对象的指针。 在这个SSCCE中,我有两个类A和B,其中B包含在A中,需要时可以访问A的方法。 尽管我有一个: gcc-c a. c-o a. o gcc-c b. c-o b.

  • 问题内容: 嘿,我刚开始我的第一本Java编程书籍,所以这应该很容易解决。弄乱我对条件句的新知识,发现标题错误。 这是代码: 当我尝试编译时: 问题答案: 错误消息告诉您变量“输入”在您的作用域中不存在。您可能想使用Scanner对象,但将其命名为“ x”,而不是“ input”。 应该修复它。