All entries for September 2019
September 10, 2019
New snippets series: WINKT
Super short blog post to start a new snippets series. Along with our SOUP series (Snippet of the <Undefined Period>) we're trying out a new way of posting. WINKT (Well I Never Knew That) is a place for all those things that we stumble across that don't warrant a complete post, but are interesting (if you're a giant geek, anyway).
Fortran Variable Declarations
To start the series off, something I never thought about in Fortran: when you declare a variable with multiple attributes, what is the Left-Hand side comma-separated list actually doing? I was reading a Doctor Fortran post about the potential pitfalls of blindly applying every attribute you might wantand saw his final example of applying (here erroneously) the DIMENSION keyword to a variable in a separate line. "Wait, " I said, "can you do that?" I wrote a quick example, compiled it (with strict standards adherence) and proclaimed "Well I Never Knew That!"
What am I talking about here? Well, consider creating an array of integers. You'll usually write something like:
INTEGER, DIMENSION(:, :), ALLOCATABLE :: I
for a 2-D array. As it turns out, you could equivalently write this as
INTEGER :: I DIMENSION :: I(:, :) ALLOCATABLE :: I
adding the attributes across several lines.
The comma-separated lists of attributes on the left of the double-colon are effectively "stacking" the attributes, but each attribute can also be applied separately.
In that example, it's clearly a bit silly and unwieldy, but it's something you might see "in the wild" and perhaps be confused by, so worth knowing. In some examples, it might actually help make things clear, with, for example, attributes such as SAVE or INTENTs, which can sometimes get "lost in the noise" of declarations. So rather than
INTEGER, SAVE :: I INTEGER :: j, k
I could write
INTEGER :: i, j, k SAVE :: i
This might look clearer, especially if I have more stacked attributes.
This is probably not something I will ever use, and I am not sure I would recommend it, since it looks a bit unexpected, and generally code should avoid unexpectedness. But it did show up to me just how the attribute lists must be working, and was an interesting ten minutes.