2017-09-22 24 views
1

fortran 77에서 문자 변수를 초기화하는 방법은 무엇입니까?

character*100 xx 

내가 어떤 가치, 가능성이 일부 인쇄 가능한 문자 또는 공백으로 초기화 할 변수를 고려한다. 시도했습니다

data xx /100*char(120)/ 

하지만 작동하지 않았습니다. 최소 작업 예 :

cat car_array.F 
    character*10 xx 
    data xx /10*char(120)/ 
    write(*,*)xx 
    end 


    ifort car_array.F 
    car_array.F(2): error #6169: This construct is not valid in this context. [CHAR] 
      data xx /10*char(120)/ 
    --------------------^ 
    compilation aborted for car_array.F (code 1) 
+1

* 작동하지 않는 것은 무엇을 의미합니까 *? 유용하다고 말할 수는 없습니다. 오류 메시지? 잘못된 결과? 어느 것? 컴파일 가능한 예제 ([mcve])를 보여주십시오. –

+0

추가 세부 사항 – wander95

+0

이제'char()'이 DATA 문에 허용되지 않습니다. –

답변

1

당신이 정말 F77 표준 준수 할 필요가 없습니다 대담한 가정을 만들기는 당신은 시도해야합니다 :

character*10 :: xx=repeat(char(120),10) 

F77에서 당신이 만드는 데 필요한 것 런타임 할당,

character*10 xx 
    integer i 
    do i=1,10 
    xx(i:i)=char(120) 
    end do 

내가이 성을 초기화하기 위해 반복 횟수를 data 문을 사용하여 볼 수있는 유일한 방법 F77의 링 길이 1 문자 배열과 동등한를 통해, 그리고 여기 당신은 char 기능을 사용할 수 없습니다

equivalence(x,y) 
    character*10 x 
    character*1 y(10) 
    data y/10*'a'/ 
    write(*,*)x 

agentp의 포스트 매우 유사 aaaaaaaaaa

+0

웃기는 군. 이렇게하는 간단한 방법이없는 것처럼 보입니다. 나는이 대답을 받아들이 기 전에 하루나 이틀을 기다릴 것이다. – wander95

+0

f77은 많은 일을 성가 시게 만들었다. 그래서 * 아무도 그것을 사용하지 않아야합니다. – agentp

+0

F77을 고수 할 필요가 없습니다. repeat의 사용은 F2003을 지원하는 컴파일러에서 정확히 수행해야합니다 (ifort가 지원합니다). –

0

. 컴파일 타임 PARAMETER 문에서 CHAR() 함수를 사용하면 간접적으로 CHAR() 함수를 사용할 수 있습니다. Old-timey이지만이 방법은 openVMS Fortran에서 작동합니다.

PARAMETER CHAR_120 = CHAR(120) 

CHARACTER*1  X(10) /10*CHAR_120/ 
CHARACTER*10 XX 
EQUIVALENCE (X, XX) 

TYPE *,XX 
+0

필자는 gfortran에서 이것을 컴파일 할 수 있었지만,'CHAR_120'을'CHARACTER'로 선언해야하고,'PARAMETER (CHAR_120 = CHAR (120))'매개 변수에 올바른 Fortran 구문을 사용해야합니다. 괄호는 선택 사항이 아닙니다. 또한, superlyly 'TYPE'은'PRINT'로 변경되어야합니다. –

+0

또한이 스타일의 변수 초기화'CHARACTER * 1 X (10)/10 * CHAR_120 /'도 표준이 아닙니다. 그러나 gfortran과 다른 컴파일러도 컴파일합니다. –

+0

내가 게시 한 내용이 테스트되었습니다. DEC (openVMS) F77 컴파일러는 매개 변수와 동일한 것을 기준으로 PARAMETER 문 (문자, 정수 또는 부동)의 데이터 유형을 가정합니다. 또한 주석에 표시 할 때 괄호를 사용하여 별도의 선언과 매개 변수를 지원합니다. 그게 더 표준 적이라는 것을 몰랐습니다. TYPE *은 단지 30 년의 습관입니다. –