CHARACTER 型指定子の後に,文字オブジェクトまたは関数の長さを続けることができます。これは次のいずれかの形式を取ります。
キーワード形式
CHARACTER [([LEN=]len)]
CHARACTER [([LEN=]len [,[KIND=]n])]
CHARACTER [(KIND=n [,LEN=len])]
非キーワード形式
CHARACTER*len[,]
len
次のいずれか。
len は宣言式か星印 (*) です。長さが指定されていない場合,基本長は 1 です。
長さが負の値に評価された場合,文字言語要素の長さはゼロとなります。
len は,宣言式か括弧で囲まれた星印,または (種別パラメタを持たない) スカラ整定数表現です。コンマは,型宣言文の中に二重コロン (::) がない場合にのみ使用できます。
この形式は,(省略可能な) データ・オブジェクトまたは関数の名前の後に宣言することもできます (v*len)。この場合,宣言された長さは,CHARACTER 型指定子の後に指定されている長さを無効にします。
どちらの形式でも,len として有効な値の最大値は,Tru64 UNIX,Linux,および Windows システムでは 2147483647 (2**31-1) で,OpenVMS システムでは 65535 です。負の値はゼロとして扱われます。
n
有効な種別パラメタを宣言しているスカラ整数型初期値式。現時点で使用可能な種別値は 1 のみです。
規則と振る舞い
文字宣言の中には自動割付けオブジェクトを宣言することができます。オブジェクトは仮引数であってはならず,その長さは定数式でない宣言式によって宣言されなくてはなりません。
文字値文関数または文字型の文関数仮引数に対して宣言される長さは,整定数式でなくてはなりません。
関数名または仮引数に対して星印の長さ宣言式 *(*) が使用された場合,対応する関数の引用または実引数の長さが使用されます。同じように,名前付き定数に対して星印の長さ宣言が使用された場合,名前の長さは,その名前が表す実定数の長さとなります。たとえば,以下の文では,STRING は 9 バイトの長さとなります。
CHARACTER*(*) STRING PARAMETER (STRING = 'VALUE IS:')
関数名は,関数が内部またはモジュール関数であるか,配列値,ポインタ値,再帰,または純粋関数である場合,* の長さで宣言することはできません。
CHARACTER*(*) という形式は,Fortran 95 の廃止予定事項となっています。
例
以下の例では,文字列 last_name に長さ 20 が与えられています。
CHARACTER (LEN=20) last_name
以下の例では,stri に長さ 12 を与え,他の 2 つの変数には長さ 8 が与えられています。
CHARACTER *8 strg, strh, stri*12
以下の例では,仮引数として strh に文字が代入された時にその文字の長さが与えられ,他の 2 つの変数には長さ 8 が与えられています。
CHARACTER *8 strg, strh(*), stri
以下の例は,既知の長さを文字列に与える方法を示しています。
CHARACTER*32 string CHARACTER string*32
以下の例は,未知の長さを文字列に与える方法を示しています。
CHARACTER string*(*) CHARACTER*(*) string
次の例は,32 文字の要素を 100 個含んでいる配列 NAMES,9 文字の要素を 100 個含んでいる配列 SOCSEC,および長さが 10 文字で,初期値 'ABCDEFGHIJ' を持つ変数 NAMETY を宣言しています。
CHARACTER*32 NAMES(100),SOCSEC(100)*9,NAMETY*10 /'ABCDEFGHIJ'/
次の例は,LAST と FIRST という 2 つの 8 文字の長さの変数を宣言している CHARACTER 文を示しています。
INTEGER, PARAMETER :: LENGTH=4 CHARACTER*(4+LENGTH) LAST, FIRST
次の例は,1 文字の要素を 26 個含む配列 LETTER を宣言している CHARACTER 文を示しています。これはまた,呼び出し側プログラムによって定義される長さを持つ仮引数 BUBBLE も宣言しています。
SUBROUTINE S1(BUBBLE) CHARACTER LETTER(26), BUBBLE*(*)
次の例では,NAME2 は自動割付けオブジェクトです。
SUBROUTINE AUTO_NAME(NAME1) CHARACTER(LEN = *) NAME1 CHARACTER(LEN = LEN(NAME1)) NAME2
関連情報
Fortran 95 の廃止予定事項については,「Fortran 95 の廃止予定事項」を参照してください。
星印の長さ宣言については,「スカラ変数のデータ型」と「引継ぎ文字長引数」を参照してください。
型宣言文の一般的な形式と規則については,「型宣言」を参照してください。