C ++到Ada的指针和异常

jsk*_*ski 0 c++ ada segmentation-fault

我正在面试潜在的软件工程候选人,并希望将这段C ++代码翻译成Ada:

#include <iostream>

int main(int argc, char *argv[])
{
  int *W = NULL;
  try { *W = 3; }
  catch (...) { std::cout << "default exception"; }
}
Run Code Online (Sandbox Code Playgroud)

与C ++代码一样,我希望Ada代码导致“被信号SIGSEGV终止”。

顺便说一句,我正在使用最新的GNAT(GNAT 9.1.1 20190503(Red Hat 9.1.1-1))

Fré*_*aca 6

Ada中的相应代码将类似于

with Ada.Text_IO; use Ada.Text_IO;

procedure SigSegV is
   type Int_Ptr is access Integer;

   W : Int_Ptr := null;
begin
   W.all := 3;
exception
   when others =>
      Put_Line ("default exception");
end SigSegV;
Run Code Online (Sandbox Code Playgroud)

但是它不会触发SIGSEGV信号,并且您可以按预期方式收到消息。此外,编译器已经警告您:

sigsegv.adb:8:04: warning: null value not allowed here
sigsegv.adb:8:04: warning: "Constraint_Error" will be raised at run time
Run Code Online (Sandbox Code Playgroud)

因此,我不确定您能否获得与使用Ada代码的C ++相同的行为...除了从Ada调用C ++之外:D