I know what you're talking about, and I had the same problem. The problem is that using the @ character with an inline address with the variable itself is adding bolts to most toolboxes. Although it supports many built-in toolchains, so you can explicitly indicate where SFR or other registers are located, this is not normal behavior for standard C.
While I am not familiar with the specific compiler you are using, I know that most compilers provide a more sophisticated way to specify a memory card. For example, Atmel's ATmega series provides the ability to specify a user memory section in project settings. For example, in the GNU toolchain, these sections are used as part of variable declarations using the variable section attribute:
__attribute__((__section__("<section_name>")))
For the ATmega series, you can find any memory in the EEPROM by including it in the same line as the variable declaration (before or after, until it is reached before the "=" in the task):
__attribute__((__section__(".eeprom")))
If you want to ensure that a specific memory address in EEPROM is set as a value as part of your binary image, so it only starts once when the image is first written, you can declare a user memory section in your project settings (in the "Memory Settings" section of the parameters "Toolchain" if you are working at Atmel Studio).
For example, I did exactly what you described using the data block by declaring the ".tune_data" section in the EEPROM section of the memory parameters (according to the provided documentation on offsets, etc.), then declaring a variable like the following:
const __attribute__((__section__(".tune_data))) Tune_Data_s as_tune_data = { <all_my_data> };
Clearly, this will be slightly different since you are not using the GNU compiler and maybe not using Atmel Studio. However, if you look at this, almost every toolchain for embedded programming provides some way to declare a section of user memory, which can then be bound to a variable in the code via pragma (or an attribute for GNU chains). The specification should be available using a command line argument and / or modifying a standard linker with command line parameters to specify a non-default linkrans. I know that the second method is the standard and only way to do this on the IAR toolchain.