使用 gcc 编译时导致错误的 case break [关闭]
Posted
技术标签:
【中文标题】使用 gcc 编译时导致错误的 case break [关闭]【英文标题】:case break causing error while compiling with gcc [closed] 【发布时间】:2013-05-13 07:24:11 【问题描述】:编译时出错: break 语句不在循环或开关内 case label '不在switch语句中
我无法附上整个代码,因为如果您坚持要查看整个内容,请告诉我,我会上传它。
void S9xSetupDefaultKeymap()
S9xUnmapAllControls();
// Build key map
s9xcommand_t cmd;
// Player 1
S9xMapButton( 65, cmd = S9xGetCommandT("Joypad1 Left"), false ); // A
S9xMapButton( 68, cmd = S9xGetCommandT("Joypad1 Right"), false ); // D
S9xMapButton( 87, cmd = S9xGetCommandT("Joypad1 Up"), false ); // W
S9xMapButton( 83, cmd = S9xGetCommandT("Joypad1 Down"), false ); // S
S9xMapButton( 79, cmd = S9xGetCommandT("Joypad1 X"), false ); // O
S9xMapButton( 80, cmd = S9xGetCommandT("Joypad1 Y"), false ); // P
S9xMapButton( 75, cmd = S9xGetCommandT("Joypad1 A"), false ); // K
S9xMapButton( 76, cmd = S9xGetCommandT("Joypad1 B"), false ); // L
S9xMapButton( 88, cmd = S9xGetCommandT("Joypad1 L"), false ); // X
S9xMapButton( 77, cmd = S9xGetCommandT("Joypad1 R"), false ); // M
S9xMapButton( 13, cmd = S9xGetCommandT("Joypad1 Start"), false ); // Enter
S9xMapButton( 16, cmd = S9xGetCommandT("Joypad1 Select"), false ); // Shift
// Player 2
S9xMapButton( 70, cmd = S9xGetCommandT("Joypad2 Left"), false ); // F
S9xMapButton( 72, cmd = S9xGetCommandT("Joypad2 Right"), false ); // H
S9xMapButton( 84, cmd = S9xGetCommandT("Joypad2 Up"), false ); // T
S9xMapButton( 71, cmd = S9xGetCommandT("Joypad2 Down"), false ); // G
S9xMapButton( 67, cmd = S9xGetCommandT("Joypad2 X"), false ); // C
S9xMapButton( 86, cmd = S9xGetCommandT("Joypad2 Y"), false ); // V
S9xMapButton( 66, cmd = S9xGetCommandT("Joypad2 A"), false ); // B
S9xMapButton( 78, cmd = S9xGetCommandT("Joypad2 B"), false ); // N
S9xMapButton( 89, cmd = S9xGetCommandT("Joypad2 L"), false ); // Y
S9xMapButton( 85, cmd = S9xGetCommandT("Joypad2 R"), false ); // U
S9xMapButton( 81, cmd = S9xGetCommandT("Joypad2 Start"), false ); // Q
S9xMapButton( 69, cmd = S9xGetCommandT("Joypad2 Select"), false ); // E
case "joypad1 down":
break;
case "joypad1 x":
break;
case "joypad1 y":
break;
case "joypad1 a":
break;
case "joypad1 b":
break;
case "joypad1 l":
break;
case "joypad1 r":
break;
case "joypad1 start":
break;
case "joypad1 select"
break;
// player 2
case "joypad2 left":
break;
case "joypad2 right":
break;
case "joypad2 up":
break;
case "joypad2 down":
break;
case "joypad2 x":
break;
case "joypad2 y":
break;
case "joypad2 a":
break;
case "joypad2 b":
break;
case "joypad2 l":
break;
case "joypad2 r":
break;
case "joypad2 start":
break;
case "joypad2 select":
break;
【问题讨论】:
你应该相信你的编译器告诉你的。没有switch
语句,带有字符串的 case
不会像您期望的那样工作。获取一本书并学习基础知识...
先阅读一些基础知识。 cprogramming.com/tutorial/lesson5.html 或任何其他教程将教使用如何使用 switch 语句。
如果您不愿意回答,请不要给我一个大拇指。
我在一个开源项目中得到了这个,我不是 C++ 程序员,而且制作它的人在不知何故之前已经编译了它。
您在此处提供的这些“case”语句是不正确的(缺少“switch”,您也不能在标准 C/C++ 中将字符串用作 case)并且什么也不做(“case”之后紧跟“break” ") 所以这个程序无法按原样工作。
【参考方案1】:
case 语法示例
switch (variable)
case 1:
//Do stuff
break;
case 2:
//Do stuff
break;
default:
//Do stuff
break;
请记住,通过使用 switch 语句,您只能处理整数变量。并且您需要指定使用switch
语句引用的变量case
语句。如果您坚持测试 char*
变量,则行为将与您预期的不同,因为您将只比较指针,而不是 char*
数组的内容。
在你的情况下,你最好使用if
、else if
。
【讨论】:
以上是关于使用 gcc 编译时导致错误的 case break [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 Visual Studio 而不是 GCC 编译时没有错误?
使用 GCC 构建的变量参数的 EDK2 Shell 应用程序在运行时会导致页面错误