command_options.gperf:

%{
#include "command_options.h"
typedef struct CommandOptionCode CommandOptionCode;
%}
struct CommandOption
  {
  const char *Option;
  int OptionCode;
  };
%%
+helpverbose, CommandOptionCode::HELPVERBOSE
+password, CommandOptionCode::PASSWORD
+nocopyright, CommandOptionCode::NOCOPYRIGHT
+nolog, CommandOptionCode::NOLOG
+_64bit, CommandOptionCode::_64BIT


command_options.h:

#ifndef __COMMANDOPTIONS_H
#define __COMMANDOPTIONS_H
struct CommandOptionCode
  {
  enum
    {
    HELPVERBOSE = 1,
    PASSWORD = 2,
    NOCOPYRIGHT = 3,
    NOLOG = 4,
    _64BIT = 5
    };
  };
#endif


当我跑步时:

gperf  -L C++ -t --output-file=perfecthash.hpp command_options.gperf


只能得到:


  不允许输入空关键字。至
  识别一个空的输入关键字,您的
  代码应先检查len == 0
  调用gperf生成的查询
  功能。


版本:GNU gperf 3.0.1
为什么?

最佳答案

我发现gperf 2.7不在乎第一部分和关键字之间是否有'%%'分隔符。 3.0.1严格执行此操作。因此,在我的情况下,我进行了修改:

%{
#include <string.h>
%}

scan


成为

%{
#include <string.h>
%}
%%

scan


我相信您的情况有所不同,因为手册指出结构的第一个字段必须称为“名称”:

"This first field must be called `name', although it is possible to modify its name with the `-K' option (or, equivalently, the `%define slot-name' declaration) described below."


-查理

关于c++ - 使用gperf:Empty输入关键字时遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5321881/

10-10 12:45