首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VAPI绑定中声明一个新枚举

在VAPI绑定中声明一个新枚举
EN

Stack Overflow用户
提问于 2021-12-25 18:45:23
回答 1查看 49关注 0票数 0

我想在VAPI文件中声明一个全新的枚举(而不是绑定到C1)。然而,当我写

代码语言:javascript
复制
[CCode (has_type_id = false)]
public enum EventKeyState {
    UP = 0,
    DOWN = 1,
    AUTOREPEAT = 2
}

在尝试使用值时,Vala试图引用已经声明的值,并在C编译器步骤中立即出错:

代码语言:javascript
复制
../tests/test_simple.vala: In function ‘_vala_main’:
../tests/test_simple.vala:7:21: error: ‘EVENT_KEY_STATE_UP’ undeclared (first use in this function)
    7 |         key.state = UP;
      |                     ^~~

如何解决这个问题,所以Vala将使用我的新值,而不是尝试引用那些未声明的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-29 20:25:12

您可以使用CCode属性将C中的一组整数分组为Vala枚举。将下列内容保存为example.vapi

代码语言:javascript
复制
[CCode (has_type_id = false, cname = "int")]
public enum EventKeyState {
    [CCode (cname = "0")]
    UP,
    [CCode (cname = "1")]
    DOWN,
    [CCode (cname = "2")]
    AUTOREPEAT 
}

然后将Vala程序保存为main.vala

代码语言:javascript
复制
void main () {
    EventKeyState a = DOWN;
}

编制这两份文件的方法如下:

代码语言:javascript
复制
valac example.vapi main.vala --ccode

将生成以下的main.c文件:

代码语言:javascript
复制
static void _vala_main (void);

static void
_vala_main (void)
{
    int a = 0;
    a = 1;
}

int
main (int argc,
      char ** argv)
{
    _vala_main ();
    return 0;
}

C编译器将优化a的初始化和赋值,尽管Vala编译器会为生成的C输出的可读性设置一个参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70482052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档