我有一大堆旧的自我构思的脚本语言的遗留代码,我们将它们编译/翻译成javascript。
该语言有一个条件跳转,跳转到一个标签。与常见的goto语句的不同之处在于,不可能进行向后跳转。在该语言中没有嵌套的if语句或循环。
由于goto不存在于javascript中,我正在寻找一种算法,可以将goto mylabel和mylabel:转换成语义上等价的结构。
我想过使用ifs,但发现它并不是微不足道的,因为goto标签的嵌套很随意。
示例:
if cond1 goto a
do something1
if cond2 goto b
do something2
a:
do something3
i
为什么我会得到以下编译器错误:
//error CS0159:没有这样的标签“lbl_proc_20”
使用以下代码:
//JUST A DUMMY CODE TO ILLUSTRATE THE CONCEPT
int a = resultOfFunction1();
int b = resultOfFunction2();
//10+ Local variables that are calculated depending on the results above
if (a < 10)
{
switch (b)
{
case 0:
我正在编写一些C代码,在我的代码中有两个嵌套循环。在特定的条件下,我希望break退出内环,continue退出外部循环。我尝试使用外部循环代码末尾的标签来实现这一点,并在条件下使用goto标记。但是,gcc给出了一个错误,在复合语句的末尾不能有标签。为什么不行?
注1:这不是一个switch语句,这个问题已经得到了的回答。
注2:这不是一个关于样式的问题,也不是我是否应该使用goto语句或条件变量的问题。
编辑:人们已经要求提供一个示例,我可以给出一个稍微简单的示例,以检查一个数组是否是另一个数组的子数组。
int superArray[SUPER_SIZE] = {...}, su
假设我有两个C源文件A.c,B.c.
A.c包含一个标签,我只想从模块B.c中找到它。
A.c只包含一个函数:
int f() {
// some commands
aLabel:
// some more commands
return 1;
}
B.c也只包含一个函数:
extern aLabel;
int g() {
// do some stuff
goto aLabel;
}
显然,这两个文件链接在一起,形成一个最终的.exe文件。
如何跳转到外部标签?
提前谢谢。
我有三个不同的标签,但我选择一个并不重要:它总是会到达第一个标签(如果我写的是“google”,= cmd也会打开)!错误是什么?为什么会发生错误?
@echo off
:start
set /p input = What do you want to open?
if "%input%" == "cmd" goto cmd
if "%input%" == "notepad" goto notepad
if "%input%" == "google" goto google
:cmd
start
我在处理DOS批处理文件和标签时遇到问题。我一直收到这个错误:在同一个文件夹中有两个批处理文件(QQ.bat和Calling.bat)。
QQ.bat的代码如下:
@echo off
set /a i=0
:loop
set /a i=i+1
echo %i%
c:
cd \Users
cd mytool
cd QQ
cd Bin
QQ.exe
if "%i%"=="2" goto exit
goto loop
Calling.bat的代码如下:
@echo off
set/a i=0
:loop
set/a i=i+1
start /b cmd /c QQ.
当我在VS2008 C#中像这样创建一条switch语句时(人为的):
switch (state) {
case '1':
state = '2';
case '2':
state = '1';
}
它抱怨说我不被允许通过:
控件不能从一个案例标签(‘案例'1’(0x31):')切换到另一个案例标签
如果不允许插入,那么break语句的目的到底是什么呢?为什么语言设计者不把它去掉,自动跳到switch语句的末尾,而不是强迫我们加入不必要的结构呢?
我对C++编程完全陌生,所以这段代码实际上可能有很多错误,我不确定。但我遇到的问题是,我在代码的开头有一个标签(START:),稍后我在goto中引用该标签。goto函数本身似乎没有问题,但是在我第一次使用开始标签的地方,我得到了一个错误,上面写着"this declaration has no storage class or type specifier"。不确定我是否只是不明白标签/goto是如何工作的,或者函数是void引起的,还是什么的。就像我说的,这对我来说都是全新的。
#include <iostream>
#include <string>
我目前正在手动将代码从Fortran翻译成MATLAB,但我不确定如何翻译其中的一部分。(整个代码实际上是一个2000行子例程。)代码如下。
C Has series crossed neckline?
120 neckext=x(trough(peaknum-1))+
* dydx*real((t-trough(peaknum-1)))
if(x(t).lt.neckext) goto 130
C NO. Here if series has not crossed neckline, nor new trough
今天我发现了一件有趣的事情。我不知道一个人不能在goto标签后声明变量。
编译以下代码
#include <stdio.h>
int main() {
int x = 5;
goto JUMP;
printf("x is : %d\n",x);
JUMP:
int a = 0; <=== giving me all sorts of error..
printf("%d",a);
}
给出的错误如下
temp.c: In function ‘main’:
temp.c:7: error: expecte