小编Rob*_*min的帖子

如何比任何其他全局或静态变量更早地创建/构造类实例?

如何在main()之前创建特定类的实例,早于任何其他实例(包括静态和全局变量,包括静态和动态库(包括第三方提供的库))?


我正在处理一个具有许多类的项目,这些类在构造期间可能会导致错误,例如访问NULL指针.任何此类错误都会导致信号发送到应用程序.我有一个信号处理程序捕获信号,显示违规线程的堆栈跟踪,并调用默认信号处理程序,导致生成核心转储等.
但是,一些此类错误导致的实例被创建为全局变量和类的静态变量.即它们被构造并导致比main()更早的信号输入.

为了捕获这样的信号,我需要在main()之前注册我的信号处理程序,即我需要创建一个实例(它将注册信号处理程序)也作为全局或类静态变量,我需要保证这样早于任何其他实例创建/构造实例.

怎么做到这一点?


要注册信号处理程序,我使用sigaction().
为了显示堆栈跟踪,我使用了backtrace(),backtrace_symbols(),abi :: __ cxa_demangle().

c++ linux

7
推荐指数
1
解决办法
186
查看次数

如何获取另一个函数的__LINE__值(在调用该函数之前)?

对于目前已有的测试框架我需要通过(第一最呼叫期间)的功能片段的行号函数的内部.像这样的东西:

#include <stdio.h>
void func(int line_num)
{
#define LINE_NUM  (__LINE__ + 1)
  if(line_num == __LINE__) // Check the passed arg against the current line.
    printf("OK");
  else
    printf("FAIL");
}

int main(void)
{
  func(LINE_NUM); // Pass to the func the line number inside of that func.
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

(这是更复杂功能的简约版本).

因为示例代码打印"FAIL".

如果我传递绝对值5,例如func(5)然后它打印"OK".我不喜欢绝对值,5因为如果我在func定义前添加一行,那么绝对值将需要更正.

而不是#define LINE_NUM (__LINE__ + 1)我也尝试了以下内容:

1.

#define VALUE_OF(x) x
#define LINE_NUM    (VALUE_OF(__LINE__) + 1)
Run Code Online (Sandbox Code Playgroud)

2.

#define VAL(a,x)    a##x …
Run Code Online (Sandbox Code Playgroud)

c c++

6
推荐指数
1
解决办法
190
查看次数

如何撤消 Jupyter Notebook 中的双击?

双击 Jupyter Notebook 中的单元格即可进入该单元格的编辑模式。
如何恢复此操作?如何退出编辑模式?

jupyter-notebook

6
推荐指数
1
解决办法
2077
查看次数

C 标准的哪些部分证明了整数类型大小之间的关系?

在 C11 [C11_N1570]和 C17 [C17_N2176]的最新草案中,我找不到以下内容的证明(我相信这是众所周知的):
sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
有人可以向我推荐特定部分吗?

我知道C++11 的这个回复。回复的第二部分讨论了C,但只涉及了values的范围它并不能证明字体大小之间的比例。

c language-lawyer c11 c17

6
推荐指数
1
解决办法
309
查看次数

如何在 Rust 中创建*通用*零大小类型实例?

如果该类型是泛型类型参数,如何创建零大小类型的实例?

(!) 我对“The Rustonomicon”9.10 提供的答案不感兴趣。处理零大小类型、片段Some(ptr::read(NonNull::<T>::dangling().as_ptr()))

例如

fn get<T>() -> Option<T>
    if size_of::<T>() == 0 {  // If the type parameter T is a zero-sized type
        return Some< ??? >    // then return the instance of that type.
    // Otherwise return something different.
Run Code Online (Sandbox Code Playgroud)

???我可以在上面的代码中放置什么来代替?

理想情况下,我希望此代码适用于作为 传递的任何零大小类型T

  • 无论该类型是否实现,Default
  • 该类型是否是
    • 一个空结构体 ( struct Zst;, struct Zst{}),
    • 空元组 ( ())
    • 空或单值枚举 ( enum Zst;, enum Zst { TheOnlyValue } …

rust

-1
推荐指数
1
解决办法
170
查看次数

标签 统计

c ×2

c++ ×2

c11 ×1

c17 ×1

jupyter-notebook ×1

language-lawyer ×1

linux ×1

rust ×1