fortran fortran中文资料网
手气不错
Article

040.outputUnits_标准输出与错误输出单元

2026年8月31日基础级

计算结果与诊断信息用途不同。标准模块iso_fortran_env提供output_uniterror_unit,使程序可以把有效结果写入标准输出,把警告和错误原因写入标准错误。

标准单元

use, intrinsic :: iso_fortran_env, only: output_unit, error_unit

write (output_unit, format) output_list
write (error_unit, format) diagnostic_list
  • output_unit承载程序正常产生、可供后续处理的结果。
  • error_unit承载非法输入、计算失败原因和警告等诊断信息。
  • 两者的具体整数值由处理器决定,应使用标准命名常量,而不是硬编码5、6等惯用单元号。

物理计算中的用途

圆面积公式S=πr²在数学上可以代入负数,但圆的半径在物理意义上不能为负。本例先计算半径2.5对应的有效面积,再检查另一项半径数据-1.0。有效结果进入output_unit,违反物理约束的数据进入error_unit

本文代码

! 合法的物理计算结果与非法输入诊断写入不同输出单元。
program outputUnitsDemo
  use, intrinsic :: iso_fortran_env, only: output_unit, error_unit
  implicit none

  real, parameter :: pi = 3.14159265
  real :: radius
  real :: area

  radius = 2.5
  area = pi * radius**2
  write (output_unit,"(A,F0.2,A,F0.2)") "半径:", radius, ",面积:", area

  radius = -1.0
  if (radius < 0.0) then
    write (error_unit,"(A,F0.2)") "错误:圆的半径不能为负,收到:", radius
  end if
end program outputUnitsDemo

直接运行

(base) hong@hongdeMacBook-Pro 040.outputUnits % gfortran -Wall -Wextra -std=f2018 exampleOutputUnits.f90
(base) hong@hongdeMacBook-Pro 040.outputUnits % ./a.out
半径:2.50,面积:19.63
错误:圆的半径不能为负,收到:-1.00

如果只执行./a.out,标准输出和标准错误默认都连接当前终端,因此两行都会显示。

分别重定向

(base) hong@hongdeMacBook-Pro 040.outputUnits % ./a.out > normal.txt 2> diagnostic.txt
(base) hong@hongdeMacBook-Pro 040.outputUnits % cat normal.txt
半径:2.50,面积:19.63
(base) hong@hongdeMacBook-Pro 040.outputUnits % cat diagnostic.txt
错误:圆的半径不能为负,收到:-1.00

在当前shell中,进程的标准输出编号为1,标准错误编号为2。省略编号的>等价于1>,所以它把标准输出写入normal.txt2>把标准错误写入diagnostic.txt。该语法为shell命令非fortran语法。

如果只写./a.out > normal.txt,面积结果进入文件,诊断信息显示在终端;如果只写./a.out 2> diagnostic.txt,诊断进入文件,正常结果仍显示在终端。

核心知识点

  • output_unit保存正常结果,error_unit报告非法输入或计算异常。
  • 直接运行时两路通常都显示在终端;重定向后可以分别保存或处理。
  • >重定向标准输出,2>重定向标准错误。
  • 写入error_unit不会自动停止程序,也不会自动设置失败退出状态。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注