小编Wil*_*ode的帖子

可以标记为Extern"C"的C++函数抛出吗?

我有C++函数我想要声明使用,extern "C"即使它们只在C++代码中调用.是的,我知道这很奇怪但是我想要保持一致性,因为我们混合了C和C++声明.我只是想确保声明一个C++函数extern "C"不会影响抛出的行为.

它看起来像这样:

extern "C" void foo() {throw exception;}

int bar()
{
    try
    {
        foo();
    } catch (exception e) { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

c++ extern-c

25
推荐指数
2
解决办法
4683
查看次数

我可以使用闭包在 Jenkins 声明式管道中定义一个阶段吗?

我正在尝试做这样的事情:

def makeStage = {
  stage('a') {
    steps {
      echo 'Hello World'
    }
  }
} 
pipeline {
  agent none
  stages {
    makeStage()
  }
}
Run Code Online (Sandbox Code Playgroud)

但它给了我这个例外:

WorkflowScript: 11: Expected a stage @ line 11, column 5.
   makeStage()
   ^
Run Code Online (Sandbox Code Playgroud)

是否可以将阶段定义为外部闭包,如果可以 - 如何定义?

groovy closures jenkins jenkins-pipeline

9
推荐指数
2
解决办法
8302
查看次数

在编译时在所有.c源文件中包含#define

我需要#define在大约300个.c文件的顶部包含一个.我宁愿不更改代码,因为它是开源代码,但如果我必须,我将只编写一个脚本来修改所有文件.有没有办法#define在编译期间使用gcc在每个源文件的顶部添加一个或头文件include?这#define是:

#define malloc MYmalloc
Run Code Online (Sandbox Code Playgroud)

c gcc

8
推荐指数
2
解决办法
8428
查看次数

在GCC中,如何在不导出所有符号的情况下导出共享库的所有typeinfo符号?

这是问题所在:

我有一个默认隐藏符号的共享库.实际上,它使用-Xlinker --version-script =选项导出特定文件中的某些符号,但隐藏所有其余符号.问题是如果我们尝试捕获在其他共享库中定义的异常,我们就会遇到问题,因为这个共享库隐藏了typeinfo.我无法显式地使异常类可见,因为它们是在我无法控制的开源库中定义的.我也不想在版本脚本符号文件中明确列出异常类的typeinfo的错位名称,因为有许多开发人员正在处理这个库,并且他们必然会忘记为某些异常类执行此操作.未来.

我尝试在开源.hpp文件之前使用#pragma GCC可见性推送(默认),但它似乎不起作用 - 符号不可见.

我也尝试使用-fvisibility-ms-compat,它确实导出了typeinfo符号,但也导出了大量其他我不想导出的符号.该库中包含C和C++代码,因此我不确定如何使用仅适用于C++的此选项.

我真正需要的是一个选项,它将使所有typeinfo符号可见,同时保留其他符号(除非它们是明确可见的).有这样的选择吗?

c++ linker gcc visibility typeinfo

5
推荐指数
1
解决办法
1608
查看次数

标签 统计

c++ ×2

gcc ×2

c ×1

closures ×1

extern-c ×1

groovy ×1

jenkins ×1

jenkins-pipeline ×1

linker ×1

typeinfo ×1

visibility ×1