代码之家  ›  专栏  ›  技术社区  ›  EMiller

Fortran控制字符(回车控制)仍然在编译器中实现吗?

  •  9
  • EMiller  · 技术社区  · 14 年前

    在书中 Fortran 95/2003 for Scientists and Engineers

    为了避免混淆,通过控制字符,我将字符“1、空格(即.\s)、0和+”称为放置在 第一

    此外,请参阅完全以固定宽度字体编写的纯文本网页: Fortran carriage-control (因为没有什么比等距字体的散文更能彰显准确性和古老性了)。我发现这一页和其他人喜欢它不太清楚。

    根据 科学家和工程师用Fortran 95/2003 ,不记得第一列是为车厢控制保留的,可能导致 好可怕 Dave Barry

    然而,当我试图坚持这个严厉的警告时,我发现格弗特兰根本不知道我在说什么。

    请允许我用一些示例代码来说明我的观点。我正试图打印出数字Pi:

    PROGRAM test_format
    IMPLICIT NONE
    
    REAL :: PI = 2 * ACOS(0.0)
    
    WRITE (*, 100) PI
    WRITE (*, 200) PI
    WRITE (*, 300) PI
    100 FORMAT ('1', "New page: ", F11.9)
    200 FORMAT (' ', "Single Space: ", F11.9)
    300 FORMAT ('0', "Double Space: ", F11.9)
    END PROGRAM test_format
    

    1New page: 3.141592741
    Single Space: 3.141592741
    0Double Space: 3.141592741
    

    “1”和“0”不是打字错误。gfortran似乎完全忽略了控制字符列。

    那么,我的问题是:

    为了清楚起见,这里是我的 gfortran -v

    Using built-in specs. Target: powerpc-apple-darwin9 Configured with: ../gcc-4.4.0/configure --prefix=/sw --prefix=/sw/lib/gcc4.4 --mandir=/sw/share/man --infodir=/sw/share/info --enable-languages=c,c++,fortran,objc,java --with-gmp=/sw --with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --disable-libjava-multilib --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9 Thread model: posix gcc version 4.4.0 (GCC)

    5 回复  |  直到 14 年前
        1
  •  10
  •   M. S. B.    14 年前

    在过去的几年里,忽略第一列的使用可能会导致行式打印机出现不好的情况,比如页面弹出——但是你最后一次看到行式打印机是什么时候?否则它依赖于输出设备、编译器和操作系统。“fortran95/2003科学家和工程师”的建议在大约15年或20年前是极好的。有了终端、postscript和其他现代打印机,第一列就不再特别了。我不再特别关注第一栏了,我也没有惹上麻烦。

    Fortran 2003标准将车厢控制列为 删除 ,这是Fortran语言标准很少做的事情。见“Fortran 95/2003解释”第359页或“Fortran 2003手册”第326页。也许用gfortran选择-std=f2003或-std=f2008可以保证列1不会被用作回车控件,这样“坏事情”就完全不可能了。

        2
  •  2
  •   supercat    14 年前

    普通打印机 硬件 会根据第一栏的内容做一些特别的事情。请注意,行式打印机没有前后移动的打印头——它们有一个链或鼓和132个锤子,每个锤子与缓冲区中的一个字节相关联。当锤子前面的字符与缓冲器中的字符匹配时,锤子将通电,缓冲器的那个字节将被消隐。当整个缓冲区为空时,打印机将加载下一行。

    在任何情况下,回车控制字符可能是一种与该语言密切相关的约定,但它们是一种硬件特性,而不是一种语言特性。事实上,除了大多数(如果不是所有的话)商店碰巧以这种方式设置了运输控制磁带之外,没有特别的保证“1”会出现在页面的顶部。

        3
  •  1
  •   Jerry Coffin    14 年前

        4
  •  1
  •   Windows programmer    14 年前

    定义了输出到打印机的回车控制字符。输出到其他类型的设备(例如穿孔卡片、纸带或那些新颖的磁性旋转圆东西)没有它们。如果您的输出转到磁盘文件,那么gfortran做的是正确的。

    编辑:gfortran做的真的是对的。如果要命令打印机驱动程序解释Fortran回车控制字符,而不是逐字打印,请使用f filter选项在lpr命令中这样说。参见示例 http://www.computerhope.com/unix/ulpr.htm

        5
  •  1
  •   Steve Lionel    11 年前

    也就是说,我不建议使用此约定编写新的应用程序,因为它可能无法在所有输出设备上按您希望的方式工作。

    推荐文章