2013-07-03 18 views
5

Có thể dừng hoặc hủy bỏ chương trình fortran bằng mã lỗi/thông báo trong một biến không? Có vẻ như đó là không thể với các nội STOP:Dừng mã trong biến?

integer :: status = 1 
character(len=3) :: err_msg = "err" 

stop status 
stop err_msg 

Cả stop cuộc gọi ném lỗi cú pháp trên biên dịch. Tôi có thiếu gì đó không, hoặc tôi có phải gọi trực tiếp số stop 1 không? Hoặc viết wrapper của riêng tôi?

Trả lời

6

Tối đa Fortran 2003 mã dừng có thể là vô hướng-char-hằng số hoặc chuỗi có tối đa 5 chữ số. Một vô hướng-char-hằng số có nghĩa là những gì người khác có thể gọi một chuỗi, ví dụ: "err" của bạn nhưng không phải là err_msg.

Trong Fortran 2008 mã dừng có thể là một biểu hiện có thể trả về một vô hướng mặc định-char-hằng-expr hoặc một vô hướng-int-hằng-expr. Nếu bạn đã có một Fortran 2008 biên dịch phù hợp sau đó bạn có thể sử dụng một tham số (ví dụ một cái gì đó khai báo là character(len=3), parameter :: err_msg = "err") như một mã dừng

Tất nhiên, tình hình thực hiện các tính năng được giới thiệu trong các tiêu chuẩn 2003 và 2008 dao động từ trình biên dịch để biên dịch và phiên bản lên phiên bản. Dường như phiên bản trình biên dịch của bạn không vượt quá tiêu chuẩn Fortran 2003.

Và hệ điều hành của bạn làm gì với mã dừng là một vấn đề khác.

+0

Ah, tôi đã bỏ lỡ rằng đó chỉ là Fortran 2008 có thể sử dụng các biểu thức. Có vẻ như gfortran mới nhất hỗ trợ các biểu thức mã ngừng, nhưng không hỗ trợ phiên bản của tôi. Hơi đau. – Yossarian

+0

@IanH, viết bên dưới, đã sửa lỗi không chính xác trong phiên bản trước của câu trả lời này mà tôi hiện đã chỉnh sửa. Cảm ơn Ian. –

6

Ngoài yêu cầu F2008 - không - không phải trong một biến số . Trong F2008 mã dừng phải là số nguyên hoặc ký tự biểu thức không đổi. Các biến không phải là hằng số - một biểu thức dựa trên giá trị của một biến không phải là một biểu thức liên tục.

Nếu bạn đã thêm thuộc tính tham số vào các khai báo statuserr_msg thì chúng sẽ là hằng số [có tên] và có thể được sử dụng làm biểu tượng chính trong biểu thức liên tục cho lệnh dừng hoặc lỗi dừng.

+0

Đó là một chút của một bugger. Tôi đoán tôi sẽ phải sử dụng 'trường hợp lựa chọn' hoặc somesuch. – Yossarian

+1

Tôi đồng ý. Đó là một hạn chế ngớ ngẩn trong ngôn ngữ ngày nay và tuổi tác. Đối với số nguyên mã dừng chọn trường hợp là chính xác những gì tôi sử dụng. – IanH

+0

IanH, (Fortran n00b ở đây) để được rõ ràng, bởi * biểu thức liên tục * bạn có nghĩa là 'CHARACTER, PARAMETER :: err_msg =" err "' sẽ hoạt động, phải không? – Alexis

2

Các tiêu chuẩn hiện tại không hỗ trợ cho các biến trong mã dừng. Tuy nhiên, chúng ngày càng trở nên linh hoạt hơn khi Hiệu suất cao đã được nêu.

Trong tiêu chuẩn sắp tới Fortran 2015 (working document from 2016/05/01, phần 8.4) mã dừng có thể là một vô hướng mặc định-char-expr hoặc một vô hướng-int-expr. Vì vậy, mã của bạn sẽ làm việc với một trình biên dịch tuân thủ.

Tính năng này của Fortran 2015 là added trong phiên bản 7 của GCC.

Các vấn đề liên quan