struct中的预期说明符限定符列表错误

时间:2016-06-23 02:14:54

标签: c struct syntax-error

我收到错误

  

错误:在'('token

之前的预期说明符限定符列表

在下面以(const char)*开头的行上,我不明白这个错误意味着什么。这是什么意思? (请注意,关于此主题还有另一个问题,但另一个问题中的一个答案并不能解释错误的含义。)

#include "stddef.h"        /* size_t */

typedef struct {
     size_t size;
     (const char)* strings[];
} STRLIST;

static STRLIST listMediaType = {
     7,
     {
         "Book",
         "Map",
         "Booklet",
         "Pamphlet",
         "Magazine",
         "Report",
         "Journal"
     }
 };

2 个答案:

答案 0 :(得分:1)

您可以通过删除括号来解决问题。只有 修复问题,因为C规范禁止使用初始化列表初始化灵活数组成员。然而,clang(我假设gcc)允许它作为扩展。如果您使用-Weverything进行编译,则会收到警告,指出您正在使用扩展程序。

至于为什么不允许括号:要真正理解你需要阅读规范中的" 6.7声明" 部分,这是38页长。简短的回答是编译器期待一个声明。声明以各种说明符和限定符开头,其中没有一个以括号开头。

因此,对错误消息的正确解释(来自编译器的观点)是:

  

"我期待结构成员的声明,这应该是   从说明符限定符开始,但你给了我一个   括弧。不要这样做。"

答案 1 :(得分:0)

此特定错误消息是由于类型+修饰符I.E周围的额外parens。围绕var appMenuTemplate = " <nav class='menu'> <ul> <li ng-repeat='item in menuCtrl.menuItems'> {{ item }} </li> </ul> </nav> "; var appMenuController = function() { var self = this; self.menuItems = [ 'home', 'about', 'portfolio', 'experience' ]; }; angular .module('exampleApp', []) .component('appMenu', { template: appMenuTemplate, controller: appMenuController, controllerAs: 'menuCtrl' }); 的额外事件。

删除额外的parens,所有错误都消失了。

请注意,仍会有关于listMediaType被定义但未使用的警告。