我想在VAPI文件中声明一个全新的枚举(而不是绑定到C1)。然而,当我写
[CCode (has_type_id = false)]
public enum EventKeyState {
UP = 0,
DOWN = 1,
AUTOREPEAT = 2
}在尝试使用值时,Vala试图引用已经声明的值,并在C编译器步骤中立即出错:
../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将使用我的新值,而不是尝试引用那些未声明的值。
发布于 2021-12-29 20:25:12
您可以使用CCode属性将C中的一组整数分组为Vala枚举。将下列内容保存为example.vapi
[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
void main () {
EventKeyState a = DOWN;
}编制这两份文件的方法如下:
valac example.vapi main.vala --ccode将生成以下的main.c文件:
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输出的可读性设置一个参数。
https://stackoverflow.com/questions/70482052
复制相似问题