gfortran在编译的文件上没有输出ident工具



我使用ident工具从源文件和编译文件中提取RCS关键字字符串。

它当然适用于源代码,也适用于GCC的C编译输出以及G77的fortran编译输出。

$ gcc -o c.out test.c
$ ident test.c c.out 
test.c:
     $Id: 63159761756 $
c.out:
     $Id: 63159761756 $

$ g77 -o g77.out test.f
$ ident test.f g77.out 
test.f:
     $Id: 63159761756 $
g77.out:
     $Id: 63159761756 $

问题是当我使用gfortran编译器编译fortran代码时。ident工具在编译的代码中找不到RCS关键字,并且什么也不返回!

$ gfortran -o gf.out test.f
$ ident test.f gf.out 
test.f:
     $Id: 63159761756 $
gf.out:

那么,gfortran怎么了?是否有任何操作变量的优化,或者ident工具无法再解析gfortran的编译输出?

我该如何解决这个问题?

编辑:

Fortran源代码:

  PROGRAM HELLO
    CHARACTER*80 ID
    ID =
 *'@(#)$Id: 63159761756 $'
    PRINT '(A)', 'Hello,fortran 77'
    Print *, 'ID is ', ID
    STOP
  END

使用字符串常量,如

  PROGRAM HELLO
  PRINT '(A)', 'Hello,fortran 77'
  Print *, 'ID is ',
 +'@(#)$Id: ident.f,v 1.2 2015/02/24 14:20:49 ig25 Exp ig25 $'
  STOP
  END

你必须确保以某种方式使用它,否则它很容易被移除。

编辑

你必须在某个地方使用它,这样编译器就看不到它实际上是无用的。我现在唯一能看到的是有点可怕的黑客攻击,但无论如何。。。

  PROGRAM HELLO
  logical, volatile :: print_it = .false.
  PRINT '(A)', 'Hello,fortran 77'
  if (print_it) then
  Print *, 'ID is ',
 +'@(#)$Id: ident.f,v 1.2 2015/02/24 14:20:49 ig25 Exp ig25 $'
  end if
  STOP
  END

在这里,您告诉具有volatile声明的编译器永远不要假设print_it可能是false。工作,但更优雅的建议是受欢迎的。

相关内容

  • 没有找到相关文章

最新更新