相关疑难解决方法(0)

C语言中setjmp和longjmp的实际用法

任何人都可以解释我究竟在哪里setjmp(),longjmp()功能可以在嵌入式编程中实际使用?我知道这些是用于错误处理的.但我想知道一些用例.

c

84
推荐指数
7
解决办法
4万
查看次数

C++:安全使用longjmp和setjmp?

关于以下内容在linux/gcc上使用C++中的longjmp和setjmp是否安全?

  1. 异常处理(我没有使用longjmp/setjmp实现异常处理.我想知道longjmp/setjmp对标准异常处理会产生什么副作用)
  2. *this 指针
  3. 信号
  4. 智能指针(boost的共享和侵入指针)
  5. 你能想到的任何其他东西.

c++ linux gcc exception longjmp

39
推荐指数
2
解决办法
1万
查看次数

在不同的功能中使用Goto功能

如何在不同的函数中使用goto函数.例如,

    main()
    {
      ....
      REACH:
      ......
    }

    void function()
    {
    goto REACH ;
    }
Run Code Online (Sandbox Code Playgroud)

如何实现这样的用法?

c c++ goto

16
推荐指数
3
解决办法
2万
查看次数

SetJmp/LongJmp:为什么这会引发段错?

以下代码总结了我目前遇到的问题.我当前的执行流程如下,我在GCC 4.3中运行.

jmp_buf a_buf;
jmp_buf b_buf;

void b_helper()
{
    printf("entering b_helper");
    if(setjmp(b_buf) == 0)
    {
        printf("longjmping to a_buf");
        longjmp(a_buf, 1);
    }
    printf("returning from b_helper");
    return; //segfaults right here
}
void b()
{
    b_helper();
}
void a()
{
    printf("setjmping a_buf");
    if(setjmp(a_buf) == 0)
    {
        printf("calling b");
        b();
    }
    printf("longjmping to b_buf");
    longjmp(b_buf, 1);
}
int main()
{
    a();
}
Run Code Online (Sandbox Code Playgroud)

上述执行流程在b_helper返回后立即创建段错误.它几乎就像只有b_helper堆栈帧有效,并且它下面的堆栈被擦除.

任何人都可以解释为什么会这样吗?我猜这是一个GCC优化,它正在擦除未使用的堆栈帧或其他东西.

谢谢.

c++ gcc g++ segmentation-fault

7
推荐指数
2
解决办法
3870
查看次数

自动对象销毁

自动对象(在堆栈上创建的对象)的销毁是否可以保证它们超出范围之前执行?

澄清:

#include <iostream>

class A {
  public:
    A() {
      std::cout << "1";
    }
    ~A() {
      std::cout << "3";
    }
};

void test123() {
  A a;
  std::cout << "2";
}
Run Code Online (Sandbox Code Playgroud)

要打印"2",a不再需要了,所以从理论上讲,编译器可以a在不再需要时尽快进行优化和销毁.

我可以依靠以上功能始终打印123吗?

c++ scope destruction

3
推荐指数
1
解决办法
3526
查看次数

包含 &lt;csetjmp&gt; 时,为什么 std 命名空间中没有 setjmp?

标题说明了一切。之后包括<csetjmp>,longjmpjmp_buf都在std命名空间中,但setjmp不是。我在 MinGW4.5 和 MSVC10 上验证了这一点。查看<csetjmp>标题后,我无法弄清楚这个选择的原因。我一直假设每个<cheader>文件都<header.h>std命名空间中包装 a 。

我错了吗 ?setjmp特殊情况背后的基本原理是什么?请赐教!

注意:我知道在 C++ 中滥用 setjmp/longjmp 的问题。

c++ std setjmp

3
推荐指数
1
解决办法
243
查看次数

标签 统计

c++ ×5

c ×2

gcc ×2

destruction ×1

exception ×1

g++ ×1

goto ×1

linux ×1

longjmp ×1

scope ×1

segmentation-fault ×1

setjmp ×1

std ×1