一个开源的x86模拟器中的键盘宏

我看不懂对应的代码,我只知道最终的宏_KEY_button这种形式的枚举,比如_KEY_ESCAPE对应的值是1,但是对于这个宏是怎么得出来的不懂,具体来说,第一行中#define _KEYS(_)括号中的_代表什么意思,枚举类型中的第二行的_KEYS(_KEY_NAME)为什么不带参数

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

define _KEYS(_) \

_(ESCAPE) _(F1) _(F2) _(F3) _(F4) _(F5) _(F6) _(F7) _(F8) _(F9) _(F10) _(F11) _(F12) \

_(GRAVE) _(1) _(2) _(3) _(4) _(5) _(6) _(7) _(8) _(9) _(0) _(MINUS) _(EQUALS) _(BACKSPACE) \

_(TAB) _(Q) _(W) _(E) _(R) _(T) _(Y) _(U) _(I) _(O) _(P) _(LEFTBRACKET) _(RIGHTBRACKET) _(BACKSLASH) \

_(CAPSLOCK) _(A) _(S) _(D) _(F) _(G) _(H) _(J) _(K) _(L) _(SEMICOLON) _(APOSTROPHE) _(RETURN) \

_(LSHIFT) _(Z) _(X) _(C) _(V) _(B) _(N) _(M) _(COMMA) _(PERIOD) _(SLASH) _(RSHIFT) \

_(LCTRL) _(APPLICATION) _(LALT) _(SPACE) _(RALT) _(RCTRL) \

_(UP) _(DOWN) _(LEFT) _(RIGHT) _(INSERT) _(DELETE) _(HOME) _(END) _(PAGEUP) _(PAGEDOWN)

define _KEY_NAME(k) _KEY_##k,

enum {

_KEY_NONE = 0,

_KEYS(_KEY_NAME)

};

c语言 define 关键字,c语言中define的一个不常见的用法相关推荐

  1. 单片机c语言的define,单片机C语言中define的妙用

    单片机C语言中define的妙用 最近一款产品调试时发现了问题,在一起检查一个小伙伴的C程序.问题不大,但暴露了一点问题. 比如:PORTB=0x23; //他的意思是把第5和第2位置1 可是你能一下 ...

  2. r语言显示找不到read_html,R语言中read.table函数不常见的用法-文本中有#注释符号...

    自从开始学习R语言,read.table是较早接触到的函数,因为要读取数据,也因为最开始学习数据分析是用"制表分隔符的txt"文件比较多,xlsm在linux系统中又不太合适,所以 ...

  3. C语言assign方法,R语言中assign函数和get函数的用法

    assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_ ...

  4. c语言 编译开关用法,C语言中define的使用方法

    C语言中define的使用方法 学习了这么多年C语言,说实话对宏自以为了如指掌了,没想到看内核代码的时候还是那么吃力,设备驱动代码中有很多这样或者那样的宏定义,各种define都有哪些学习方法呢?以下 ...

  5. c语言define需要分号骂,C语言中define的用法

    C语言中define的用法 2016-01-06 15:00  来源: 博客园 define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便. 预处理命令以"#& ...

  6. c语言数组中define,c语言中#define的用法

    c语言中#define的用法 C语言中,可以用 #define 定义一个标识符来表示一个常量.其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译 ...

  7. c语言typeof 变量,c语言中typeof关键字

    为什么因为一个关键字而专门写一篇随笔呢?因为这个关键字在Linux里面地位非同一般!这个关键字typeof在linux内核里面使用非常广泛! 下面这两个等效声明,用于声明int类弄的变量a typeo ...

  8. #define c# 报错_c语言中#define的用法

    c语言中#define的用法 C语言中,可以用 #define 定义一个标识符来表示一个常量.其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译 ...

  9. c语言中1B是多少,C语言1、C语言中,运算对象必须是整型的运算符是【】A./B-查字典问答网...

    C语言1.C语言中,运算对象必须是整型的运算符是[]A./B.%C.++D. 2.下列标识符中,不合法的是[] A.x2B.sizeofC._123D.char2 5.设d是double型变量,若要从 ...

最新文章

  1. Leptonica在VS2010中的编译及简单使用举例
  2. 超越ReLU却鲜为人知,3年后被挖掘:BERT、GPT-2等都在用的激活函数
  3. MFC/Windows API 使用过的函数(持续更新)
  4. IT 行业的创新 - 创新的迷思 (5-6)
  5. 解决eclipse闪退的办法
  6. Swift学习笔记 闭包表达式
  7. 最优化学习笔记(二十)——全局搜索算法
  8. ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
  9. UGUI源码之绘制初探
  10. 网页内嵌多媒体 IE,Mozilla、Firefox、NetScape、Opera
  11. MYSQL中redo log和binlog之间的区别
  12. c语言atol是什么缩写,C语言atol函数的可移植版本疑问
  13. Java编程基础19——Map集合斗地主案例
  14. 人在旅途——》张家界之旅:20190420
  15. Tomb.finance每周更新(11.29-12.5)
  16. UE4 将项目压缩成最小的Zip压缩包
  17. Vue实现Google登录
  18. 基于 nonce 的用户身份验证协议
  19. 戴尔 服务器重装后蓝屏,dell inspiron 5490重新安装win10 1903专业工作站版系统后开机频繁蓝屏...
  20. B. TMT Document—— Codeforces Round #715 (Div. 2)

热门文章

  1. php多人点餐可以看到对方点的菜,千万不要小看你身边那个会点菜的人,因为
  2. 统计文章中字母出现频率
  3. 应用程序池优化配置方案(IIS7、IIS7.5)
  4. 华为项目Tree canvas画图2
  5. CSS浏览器兼容性----Hack
  6. 从一个视图控制器切换到另一个视图控制器的几种方式
  7. openwrt mt7620 内存大小检测
  8. 黑马程序员---面向对象笔记总结
  9. FarPoint Spread For .Net 4.0
  10. 那些有趣的电子漫画合集