Fortran77 statement - character assignment

  • Context: Fortran 
  • Thread starter Thread starter nds
  • Start date Start date
  • Tags Tags
    Assignment Fortran77
Click For Summary

Discussion Overview

The discussion revolves around a Fortran 77 character assignment issue encountered while porting code from an IBM AIX environment to Linux using the g77 compiler. Participants explore the interpretation of a specific statement and its compatibility with different compilers.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant describes the attempt to initialize a character variable "var" using hexadecimal format with the statement /ZFF/, suggesting that the 'Z' indicates hexadecimal interpretation.
  • Another participant notes that the '+' character in fixed-format Fortran indicates a continuation of the previous line, which may not be correctly interpreted in free-format, suggesting the lines be combined into one statement.
  • A different participant expresses uncertainty about the standardization of using 'Z' for hexadecimal data in Fortran and proposes that ZFF might be a pre-processor constant defined elsewhere.
  • One participant offers a standard Fortran approach to assign a hexadecimal value to "var" using the CHAR function.
  • A later reply indicates understanding of the format delimiter and expresses satisfaction with the proposed solution of using var = char(255).
  • Another participant requests a tutorial for beginners in Fortran, indicating a need for foundational knowledge.

Areas of Agreement / Disagreement

Participants express varying levels of certainty regarding the use of 'Z' as a hexadecimal format delimiter and the compatibility of the code with g77. No consensus is reached on the standardization of this feature in Fortran.

Contextual Notes

There are unresolved questions regarding the interpretation of the character assignment and the potential influence of compiler differences on the code's behavior.

Who May Find This Useful

Individuals interested in Fortran programming, particularly those transitioning code between different compiler environments or seeking to understand character data handling in Fortran 77.

nds
Messages
2
Reaction score
0
fortran77 statement -- character assignment

Hi, I am porting an application written in fortran 77 to linux. The following code compiles well with IBM xlf compiler on AIX. However, when I use g77, it fails with the following error:foo.f:6:
+ var /ZFF/
^
Invalid declaration of or reference to symbol `zff' at (^) [initially seen at (^)]

I am not sure how ZFF is internally interpreted. I also tried using DATA var /ZFF/ (not that there are no singl quotes around ZFF.) but it doesn't work with g77

Can someone please help? Thank you.

Code:
program  test

      CHARACTER * 1
     +             var /ZFF/
	 
	 
	   write(*,*) "printing var=", var
	   return
end
 
Last edited:
Technology news on Phys.org


Your program is trying to initialize a one-byte character variable "var" using hexidecimal format. The 'Z' in the data assigment (/ZFF/) is the format deliminator for hexidecimal that let's the program know that the following should be interpretated as HEX.

I can't remmeber if g77 supports this or not. If not, your going to have to resort to some work-arounds.
 


nds said:
Code:
      CHARACTER * 1
     +             var /ZFF/

These two lines look like they're intended to be a single statement, split (for some unknown reason) into two lines. In traditional fixed-format FORTRAN, the '+' in position 6 indicates that the second line is a "continuation" of the preceding line.

In fixed-format, the compiler discards the '+' after interpreting it as a continuation character. I suspect that you're compiling the program in free-format, in which the '+' would not be treated as a continuation character but instead as an arithmetic '+'.

Try collapsing the two lines together:

Code:
      CHARACTER * 1 var /ZFF/
 


I'm pretty sure using Z to mean hexadecimal data is non-standard fortran. I used to use IBM hardware quite a lot, but and I don't remember that feature.

Another possibility is that ZFF is a pre-processor constant that is defined somewhere else (maybe in the makefile, not in the source code). In that case, its value could be anything.

My next move would be to read the code and see what "var" is used for. It seems a fairly "anonymous" sort of variable name...

FWIW you can assign var to hexadecimal FF in standard fortran with
CHARACTER*1 var
var = char(255)
 


AlephZero , TheoMcCloskey -- thank you very much! Now I understand that Z is the format delimiter and I think var = char(255) is exactly what I need. Thank you again!
 


i need a fortran tutorial for begginers, kindly help
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 27 ·
Replies
27
Views
7K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
6K
  • · Replies 4 ·
Replies
4
Views
12K
  • · Replies 16 ·
Replies
16
Views
3K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 9 ·
Replies
9
Views
8K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 11 ·
Replies
11
Views
3K