当前位置: 首页 > 编程日记 > 正文

switch的case使用数组C语言,使用常量数组的元素作为switch语句中的case

我正在尝试将一组按键映射到一组命令.因为我处理来自多个地方的命令,所以我想在键和命令之间设置一个抽象层,这样如果我更改底层键映射,我就不必更改很多代码.我目前的尝试看起来像这样:

// input.h

enum LOGICAL_KEYS {

DO_SOMETHING_KEY,

DO_SOMETHING_ELSE_KEY,

...

countof_LOGICAL_KEYS

};

static const SDLKey LogicalMappings[countof_LOGICAL_KEYS] = {

SDLK_RETURN, // Do Something

SDLK_ESCAPE, // Do Something Else

...

};

// some_other_file.cpp

...

switch( event.key.keysym.key ) {

case LogicalMappings[ DO_SOMETHING_KEY ]:

doSomething();

break;

case LogicalMappings[ DO_SOMETHING_ELSE_KEY ]:

doSomethingElse();

break;

...

}

当我尝试编译它(gcc 4.3.2)时,我收到错误消息:

错误:'LogicalMappings'不能出现在常量表达式中

我不明白为什么编译器有这个问题.我理解为什么你不允许在case语句中包含变量,但我认为你可以使用常量,因为它们可以在编译时进行评估.常量数组不适用于switch语句吗?如果是这样,我想我可以用以下代码替换数组:

static const SDLKey LOGICAL_MAPPING_DO_SOMETHING = SDLK_RETURN;

static const SDLKey LOGICAL_MAPPING_DO_SOMETHING_ELSE = SDLK_ESCAPE;

...

但这似乎不那么优雅.有人知道为什么你不能在这里使用常数数组吗?

编辑:我已经看到C++标准的一点声称,"一个整数常量表达式只能涉及文字(2.13),枚举器,常量变量或用常量表达式初始化的整数或枚举类型的静态数据成员(8.5) ...".我仍然不明白为什么常量数组不算作"用常量表达式初始化的枚举类型".可能只是我的问题的答案是"因为它就是它的方式",我将不得不解决它.但如果是这种情况,那就有点令人失望,因为编译器确实可以在编译时确定这些值.

相关文章:

PHP上传文件函数move_upload,如何使用php中move_uploaded_file函数

我们平时上传的文件保存在临时文件夹中,例如/ tmp,但临时文件夹的内容在一段时间后会被删除,因此为了将来要使用上传文件,需要将内容保存在不太可能被任意删除的专用目录中,这时就需要使用move_uploaded_file函数&…

java的标记接口_Java中的标记接口?

我被教授,Java中的Marker接口是一个空接口,用于向编译器或JVM发送信号,实现此接口的类的对象必须以特殊方式处理,如序列化,克隆等。但最近我了解到,它实际上与编译器或JVM无关。例如,在Serializ…

Java Exception

先贴上一段Exception源码注释 1 /**2 * The class {code Exception} and its subclasses are a form of3 * {code Throwable} that indicates conditions that a reasonable4 * application might want to catch.5 *6 * <p>The class {code Exception} and any subc…

c语言实验至少包括四个函数中,C语言实验报告《函数》

学号&#xff1a;__________ 姓名&#xff1a;__________ 班级&#xff1a;__________ 日期&#xff1a;__________指导教师&#xff1a;__________ 成绩&#xff1a;__________实验四 函数一、 实验目的1、掌握函数定义、调用和声明的方法2、掌握实参和形参之间的…

Android与iOS对比

最近有并行开发Android与iOS端App,想在这总结一些两种开发的相似与区别。转载于:https://www.cnblogs.com/stuwan/p/6475725.html

oracle停止一切进程,oracle启动/停止的几种方法以及 启动和停止过程中出错的解决办法...

一、启动几种方法&#xff1a;1、sqlplus /nologconnect /as sysdbastartup2、sqlplus /nologconnect /as sysdbastartup nomountalter database mountalter database open在以上两种方法中&#xff0c;1方法中的startup相当于2方法中的startup nomountalter database mountalt…

前端js判断上传是否为EXCEL表格问题

直接贴代码吧~JS部分 输入框部分&#xff1a; 转载于:https://www.cnblogs.com/aijiajia1314/p/9517541.html

java 外部类似_[求指点] 如何用java 实现类似linux中管道调用外部程序的功能

想写个小程序实现类似linux中管道的功能&#xff0c;创建一个外部子进程&#xff0c;然后主进程不断地写输入给子进程&#xff0c;而后把子进程的返回值取出。如下的小代码就是从stdin读入一个字符串&#xff0c;调用子进程(cat)返回这个串&#xff0c;然后返回。但下面的写法只…

c语言递归求五阶行列式源代码,久游堂怎么样 -官网

iOS版# -*- coding: utf-8 -*- """ author: Dell Created on Tue Dec 24 12:33:56 2019 """ import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait#等待一个元素加载完成 from selenium.webdri…

POJ - 3660 Cow Contest(flod)

题意&#xff1a;有N头牛&#xff0c;M个关系&#xff0c;每个关系A B表示编号为A的牛比编号为B的牛强&#xff0c;问若想将N头牛按能力排名&#xff0c;有多少头牛的名次是确定的。 分析&#xff1a; 1、a[u][v]1表示牛u比牛v强&#xff0c;flod扫一遍&#xff0c;可以将所有牛…

oracle scn与数据恢复,SCN与数据库恢复的关系

一。SCN与CHECKPOINTCKPT进程在checkpoint发生时&#xff0c;将当时的SCN号写入数据文件头和控制文件&#xff0c;同时通知DBWR进程将数据块写到数据文件。CKPT进程也会在控制文件中记录RBA(redo block address),以标志Recovery需要从日志中哪个地方开始。与checkpoint相关的SC…

Java 理解泛型的基本含义

Java 泛型 Java 泛型&#xff08;generics&#xff09;是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制&#xff0c;该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。 泛型方法 你可…

java严格区分大小写吗_Java是否区分大小写?

我在某处读到Java是区分大小写的。 我一直无法证实这一点。Java源代码是区分大小写的&#xff0c;如果你的意思是。 即Double与double不是同一个types&#xff0c;并且可以有两个不同的variablesmyData和mydata 。是吗&#xff1f; 如果是这样&#xff0c;为什么&#xff1f;区…

4、Hibernate查询语句

转载于:https://www.cnblogs.com/wyl9527/p/6484099.html

循环控制体重C语言,中年以后很容易发福变胖?4个建议帮你控制体重,保持轻盈体态...

随着年龄的增长&#xff0c;尤其是40岁以后&#xff0c;我们会发现&#xff0c;对待自己的体重与身材之时会显得很无力&#xff0c;在年轻的时候&#xff0c;减掉几斤的体重并不难&#xff0c;而到了中年以后则会变得很困难&#xff0c;即使减重成功&#xff0c;也非常容易反弹…

oracle异地迁移,数据泵实现Oracle数据迁移到异地库

今天发现impdp命令有个特殊的用途&#xff0c;可以将数据库的一个用户迁移到另一台机器上的数据库的用户中。如果目标用户不存在&#xff0c;还可以对应的创建该用户。下面就来看一下命令格式&#xff1a;Impdpusername/passwddbsnameremap_schemauserA:userB remap_tablespace…

轨迹系列1——一种基于路网图层的GPS轨迹优化方案

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/ 1.背景 GPS数据正常情况下有20M左右的偏移&#xff0c;在遇到高楼和桥梁等情况下偏移会更大。本方案讨论基于路网图层如何来进行轨迹优化。 2.数据预处理…

c语言如何输出整串链表,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include //malloc头文件struct Student //定义结构体{int num;struct Student *next; //指向下一个数据节点的指针};int n;struct Student *creat() //定义建立链表的函数{n0;struct Student *p1,*p2,*head;p1p…

java基于http协议编程_Java中基于HTTP协议网络编程

java中为我们的网络支持提供了java.net包&#xff0c;能够使我们以编程的方式来访问Web服务功能&#xff0c;这篇博客&#xff0c;就跟大家分享一下&#xff0c;Java中的网络编程的知识&#xff0c;主要是学习下该java.net包下的API。URI——>URLURI:表示的是统一的资源标识…

json问题小结

json 键值对增加、删除 obj.keyvalue; // obj.keyobj[key]eval("obj."key); delete obj.key; vue中新增和删除属性 this.$set(object,key,value) this.$delete( object, key ) 触发视图更新 遍历键值 for (var key in data) {console.log(key:data[key]); //键:值 } …

windows 如何安装oracle 补丁包,Windows Server 2003 上安装 Oracle10g(10.2.0.1)并升级 至补丁(10.2.0.4) 图解...

Windows Server 2003 上安装 Oracle10g(10.2.0.1)并升级 至补丁(10.2.0.4) 图解第一部分&#xff1a;安装 Oracle 10.2.0.11、选择安装方法2、选择安装类型3、指定安装目录4、检查先决条件5、选择配置选项6、选择数据库配置7、指定数据库配置选项8、选择数据库管理选项9、指定数…

C++通过HTTP请求Get或Post方式请求Json数据(转)

原文网址&#xff1a;https://www.cnblogs.com/shike8080/articles/6549339.html #pragma once#include <iostream>#include <windows.h>#include <wininet.h> using namespace std; //每次读取的字节数#define READ_BUFFER_SIZE 4096 enum HttpInterfaceErr…

工厂模式 android,当Android遇见工厂模式

设计模式.png我们先看一下一个Android系统应用中的工厂模式列子&#xff0c;再讲解工厂模式。package com.android.mms.ui;import android.content.Context;import android.util.Log;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException…

抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

在工厂方法模式中&#xff0c;工厂只负责生产具体的产品&#xff0c;每一个具体的工厂对应着一个具体的产品&#xff0c;工厂方法也具有唯一性&#xff0c;如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品&#xff0c;例如&#xff1a;海尔品牌不止生产海尔TV…

npm-run 自动化

为什么使用npm run 插件不需要全局安装&#xff0c;只要安装在工程项目中&#xff0c;npm上的包提供了命令行接口&#xff0c;可以直接使用这些局部安装的插件; 举例&#xff08;babel&#xff09;&#xff1a; 在工程项目中局部安装babel、转码规则后&#xff0c;直接在终端中…

docker 安装 oracle12,使用Docker安装Oracle 12c

使用Docker安装Oracle 12c假设你的服务器已成功安装Docker&#xff0c;继续进行以下操作&#xff1a;1. 启动Docker[rootnode01 ~]# service docker start2. 从远程仓库搜索oracle image[rootnode01 ~]# docker search oracleINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDd…

python3 面向对象(一)

以Student类为例&#xff0c;定义类通过 class 关键字 class Student(object):pass class 后面紧接着是类名&#xff0c;即 Student&#xff0c;类名通常是大写开头的单词&#xff0c;紧接着是 (object)&#xff0c;表示该类是从哪个类继承下来的 >>> stu Student() …

shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务

简介最近运维人员提出需求&#xff0c;增加一个运维页面&#xff0c; 查询当前的业务进程信息包括&#xff1a;进程名称、启动命令、启动时间、运行时间等&#xff0c;可以通过页面点击重启按钮&#xff0c;可以重启后端的一系列系统进程。思路java程序获取linux进程信息可以通…

signature=680da11b802226668317d65ae7c38eb7,encryption with designated verifiers

摘要&#xff1a;The offline keyword guessing attack (KG attack) is a new security threat to the searchable public key encryption with designated verifier. Many techniques have been proposed to resist such an attack. However, all these techniques are only s…

PHPMailer类 发送邮件

/*** [sendMail 邮件发送类]* param [string] $address [收件人的邮件地址]* param [string] $nickname [收件人的昵称]* param [string] $subject [邮件的标题]* param [string] $content [邮件的内容]* param [string] $attachment [邮件的附件]* return …