Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction Fortran控制字符(回车控制)是否仍在编译器中实现?_Compiler Construction_Fortran_Gfortran_Control Characters - Fatal编程技术网

Compiler construction Fortran控制字符(回车控制)是否仍在编译器中实现?

Compiler construction Fortran控制字符(回车控制)是否仍在编译器中实现?,compiler-construction,fortran,gfortran,control-characters,Compiler Construction,Fortran,Gfortran,Control Characters,在这本书中,有很多关于认识到format语句中的第一列是为控制字符保留的重要性的讨论。我在互联网上也看到了被称为运输控制的控制字符 为了避免混淆,通过控制字符,我将字符“1、空白(即.\s)、0和+”称为在FORMAT语句的第一列(字符)中放置时对输出的垂直间距有影响 此外,请看完全用固定宽度字体书写的纯文本网页:(因为没有什么比单间距字体的散文更能体现准确性和古老性了)。我发现这一页和其他喜欢它的人不太清楚 根据,如果没有回忆起第一列是为车厢控制保留的,可能会导致可怕的意外输出。解释一下,输入

在这本书中,有很多关于认识到format语句中的第一列是为控制字符保留的重要性的讨论。我在互联网上也看到了被称为运输控制的控制字符

为了避免混淆,通过控制字符,我将字符“1、空白(即.\s)、0和+”称为在FORMAT语句的第一列(字符)中放置时对输出的垂直间距有影响

此外,请看完全用固定宽度字体书写的纯文本网页:(因为没有什么比单间距字体的散文更能体现准确性和古老性了)。我发现这一页和其他喜欢它的人不太清楚

根据,如果没有回忆起第一列是为车厢控制保留的,可能会导致可怕的意外输出。解释一下,输入错误的字符,核导弹就会向挪威发射

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

请允许我用一些示例代码来说明我的观点。我正试图打印出数字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根本不符合标准

为清楚起见,下面是my
gfortran-v的输出

使用内置规格。
目标:powerpc-apple-darwin9
配置为://GCC-4.4.0/Optry-前缀=/sw前缀=/sw/Lb/gcc4.4——下颌骨=/sw/sAs/SMAN/MAN-IFODIr= /sW/Stuts/Field-使能语言= C、C++、FORTRAN、Objc,java——带gmp=/sw——带libiconv前缀=/sw——带ppl=/sw——带cloog=/sw——带系统zlib——x-includes=/usr/X11R6/includes——x-libraries=/usr/X11R6/lib——禁用libjava多库——build=powerpc-apple-darwin9——host=powerpc-apple-darwin9——target=powerpc-apple-darwin9
线程模型:posix

gcc版本4.4.0(gcc)

我认为Fortran 95是最后一个指定打印输出第1列中字符特殊含义的版本。

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

编辑:gfortran真的做了正确的事情。如果要命令打印机驱动程序解释Fortran回车控制字符,而不是逐字打印它们,请使用f filter选项在lpr命令中这样说。例如,见

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

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

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

打印机没有回车、换行或换行控制字符的概念。相反,他们使用缓冲区的第一个字符来指示纸张在打印每行之前应该做什么。某些代码将按固定金额推进纸张;其他代码将选择纸带读取器上八列(IIRC)中的一列,并将打印纸和纸带一起推进,直到在相应的列上发现一个孔。传统上,纸带是一个与打印页长度相同的环,第1列有一个孔;纸张将排成一行,以便在每一页的打印开始位置出现第1列保留。我读过一家商店,它使用双倍长度的字体,第7列和第8列用扇形折叠纸向内和向外的穿孔排列。好把戏——我想知道这有多普遍


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

是的,Fortran编译器仍然支持Fortran回车控制,尽管它通常在默认情况下被禁用。例如,在“英特尔Fortran”中,需要使用非标准(但广泛实施)CARECONTROL='Fortran'选项打开文件。看看gfortran是否也有类似的情况


也就是说,我不建议使用此约定对新应用程序进行编码,因为它可能无法在所有输出设备上正常工作。

在我的gfortran手册页中,语法为-std=f95,但我非常感谢您的支持