F() is just a macro that forces a cast into the string, which ensures the string stays in flash, and allows the selection of the correct method to read it from there and print it.
Legal in the sense that it is accepted by the compiler, but not a habit to get into I think. Can you suggest a legitimate reason for using a multi character char variable ?
In the past, I've used it on low-memory architectures (not unlike the AVR) to avoid the relatively high overhead of a string's terminating null, when storing simple commands or mnemonics.
UKHeliBob:
You know that you are short of memory when literally every byte counts.
Thanks for the example.
I did once hear of a commercial system (I think it was an alarm system, but it's over 30 years ago) based on a Z-80 that had no RAM, but relied solely on the registers and pre-compiled stack return addreseses.
Personally, I think that was going a bit too far, even back then, but sometimes extra costs are critical.