小编Mic*_*ler的帖子

从源中提取预处理器符号

我正在寻找一种方法来提取我的代码中使用的所有预处理器符号.
例如,如果我的代码如下所示:

#ifdef FOO
#endif

#if ( BAR == 1 && \
      defined (Z) )
#endif
Run Code Online (Sandbox Code Playgroud)

我想把列表[FOO,BAR,Z]作为输出.

我发现了一些帖子gcc -E -dM,但这会显示预处理器将应用于代码的所有符号.
相反,我想要的是代码中实际使用的所有符号的列表.

有什么建议?

c c++ c-preprocessor

13
推荐指数
1
解决办法
201
查看次数

分段错误在ADA中打开文件

我必须将一些用ADA编写的遗留软件从Windows移植到Linux.程序编译正常,但在执行时以分段错误终止.

当程序试图打开文件(文件存在;)时发生段错误.奇怪的是,该程序成功地在执行早期打开另一个文件而没有错误.两个文件都是二进制文件.

使用gdb逐步执行程序,我可以追踪执行的最后一行

DIO.Open (FP (File), To_FCB (Mode), Name, Form);
Run Code Online (Sandbox Code Playgroud)

它在a-direio.adb第167行中定义.

如何进一步调查故障原因?DIO.Open的参数值看起来没问题(它们与上一次成功调用DIO.Open相同,但文件名除外).任何提示都表示赞赏.


编辑

这是最终调用DIO.Open的代码:

procedure Open
 (The_File      : in out File_Type;
  The_Mode      : in     A_DB_Mode := DBS_Database_Types.InOut_DB;
  The_Name      : in     String;
  The_Form      : in     String    := "") is
begin

  Ada_File_IO.Open
    (File => The_File,
     Mode => DB_Mode_To_File_Mode(The_Mode),
     Name => The_Name,
     Form => The_Form);

exception
  when Ada_File_IO.Status_Error => raise Status_Error;
  when Ada_File_IO.Name_Error   => raise Name_Error;
  when Ada_File_IO.Use_Error    => raise Use_Error;

end Open;
Run Code Online (Sandbox Code Playgroud)

其中ADA_File_IO声明为

package …
Run Code Online (Sandbox Code Playgroud)

linux file-io ada segmentation-fault

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

标签 统计

ada ×1

c ×1

c++ ×1

c-preprocessor ×1

file-io ×1

linux ×1

segmentation-fault ×1