示例代码如下:
num_children
输入文件CREATE TABLE `history_uids` (
`uid` int(10) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `history_uids` (`uid`, `active`) VALUES
(1, 1),
(2, 0),
(3, 0),
(4, 0),
(5, 0),
(6, 0);
CREATE TABLE `options` (
`id` int(10) NOT NULL,
`id_parent` int(10) DEFAULT NULL,
`text` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `options` (`id`, `id_parent`, `text`) VALUES
(1, NULL, 'parent active'),
(2, 1, 'child 1 inactive'),
(3, 1, 'child 2 inactive'),
(4, 1, 'child 3 inactive'),
(5, 1, 'child 4 inactive'),
(6, 1, 'child 5 inactive');
ALTER TABLE `history_uids`
ADD PRIMARY KEY (`uid`);
ALTER TABLE `options`
ADD PRIMARY KEY (`id`),
ADD KEY `id_parent` (`id_parent`);
ALTER TABLE `options`
ADD CONSTRAINT `ibfk_3` FOREIGN KEY (`id_parent`) REFERENCES `options` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `ibfk_4` FOREIGN KEY (`id`) REFERENCES `history_uids` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE;
包含:
program main
implicit none
integer :: ufile
real :: a, b, c
namelist /my_nlt/ a, b, c
open(newunit=ufile,file='my_nlt.txt')
read(ufile,my_nlt)
close(ufile)
write(*,my_nlt)
end program main
此处,输入文件中缺少变量my_nlt.txt
。
运行 &my_nlt
a=1.0
b=2.0
/
编译的代码不会发出警告/错误。我想知道是否有编译器选项可用于在遇到这种情况时引发错误/警告?
答案 0 :(得分:4)
我不知道gfortran(或任何其他Fortran编译器)有这样的选项。我也强烈建议您在找到该选项时不要依赖此选项。
存在名称列表格式,以使对特定对象的输入具有某种简单性和灵活性。希望将名称列表中的警告读为不更新所有变量,这可能是试图不当使用该工具。
对于程序和问题的输入,预期的运行时行为是使用所声明的值定义a
和b
,而未定义c
。相反,我们可以在读取之前使用值定义三个变量,并查看它们是否被读取更新:
real, parameter :: SENTINEL=HUGE(0.)
real :: a=SENTINEL, b=SENTINEL, c=SENTINEL
namelist /my_nlt/ a, b, c
open(newunit=ufile,file='my_nlt.txt')
read(ufile,my_nlt)
if (a==SENTINEL.or.b==SENTINEL.or.c==SENTINEL) ERROR STOP
此处SENTINEL
是变量所不希望的值或输入中的意外值。未包含在名称列表记录中的变量会在读取之前保留其值。
这与肯定不会出现是不一样的(特别是在可能没有超出范围的输入值的情况下),但是如果要检查,则必须手动解析输入文件。这样的名称列表文件的结构定义明确。
作为最后的考虑,变量c
是否在以下名称列表输入记录中“存在”?
&my_nlt a=1., b=2., c=1* /