c++中如何知道 标号 的值???

hproof 2002-02-19 02:26:55

bool Run()
{
static void *p=0;
if(p)
goto p;
t1:
cout<<"t1"<<endl;
p=t2;return 1;
t2:
cout<<"t2"<<endl;
p=t3;return 1;
t3:
cout<<"t3"<<endl;
p=0;return 0;
}

void main()
{
while(Run());
}
执行后输出:
t1
t2
t3

//
其实我就是想让一个标号的值(应该就是它的地址吧?),赋给一个指针。好让我能够利用 goto 跳转。
想当然的应该可以,可编译不通过。
//即使 p=标号n 这条语句在 标号n 定义后写出也不通过。上面写在前只是个简单的例子。
我目前的解决方法:
1,利用c语言,再多看看它的语法。//可我不知道
2,利用c++类,虚拟指针。。。。//不过这个我嫌麻烦,大才小用。

3,不知道pascal对标号怎么看待,是否支持这样的赋值?//我还得装pascal,学它的dll啊。。。

各位高手是否知道别的更好的方法。或者,
1,c/c++语法如何使用才能使上面的编译通过?
2,pascal中可以取标号的值吗?它的dll是否很容易写出?
...全文
63 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng_can 2002-02-19
  • 打赏
  • 举报
回复
你认为用switch的效率不高吗?
你一定要使用那么复杂的内嵌汇编吗?
写程序在不是很重要的地方,我劝你还是去注意注意可读性,不要去追求那种无聊的效率。
多线程?现搞清楚你想干什么再说吧
hproof 2002-02-19
  • 打赏
  • 举报
回复
写汇编在c++中我可以试试,,,虽然,,好象很麻烦,要知道地址才行."用嵌入汇编,记录eip/ip再用jmp 。",一看就知道不简单。
  但多线程是绝对不行的,因为,,,这可能会导致成千上万的线程竞争我那只有300M 的目标CPU.
sttony 2002-02-19
  • 打赏
  • 举报
回复
考虑效率的话,你应该用os的多线程,多进程(麻烦一点)。
如果你要编系统程序的话,可以去参考操作系统教程,至于用c语言是很难实现的,还是用嵌入汇编,记录eip/ip再用jmp 。
hproof 2002-02-19
  • 打赏
  • 举报
回复
哇,终于有人回答了。哈,,可我改密码后登陆不上了,不知道现在出现的什么名字。

直接goto标号,,,是固定的。
而我需要的是同样的调用一个函数,而这个函数自己能实现“独立线程”的效果——它可以自己记录上次运行的地址,在这次运行时,选择正确的地址继续运行下去!
以下这种方法也能实现:
int Run()
{
  static int ip=0;
  switch(ip)
  {
  case 0:
      ip=1;return 1;  //语句1;
  case 1:
      ip=2;return 1;  //语句2;
  case 2:
      ip=0;return 0;  //语句3;
  }
}

当我不断的调用run函数时,它分别执行语句1、2、3、1、2、3……。
但,我必须考虑到效率问题,,
sttony 2002-02-19
  • 打赏
  • 举报
回复
为什么要将标号赋给指针呢?直接跳转不行吗?goto 标号。goto 指针好象是不行吧,如果你真要跳转到某一特定地址,可以用嵌入汇编。
sttony 2002-02-19
  • 打赏
  • 举报
回复
为什么要将标号赋给指针呢?直接跳转不行吗?goto 标号。goto 指针好象是不行吧,如果你真要跳转到某一特定地址,可以用嵌入汇编。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧