I have spent nearly a day tracing this in a 2017 project. The @ symbol occurs in the usb framework code from around that time (in file
usb_hal_pic16f1.h).
The section referred to is entitled
MIGRATION TO THE CCIAlso, the document
MPLAB_XC8_C_Compiler_User_Guide_for_PIC.pdf, 50002737C-page 567 says this
(2036) use of @ is not compliant with CCI, use __at() instead (Parser)
The CCI does not permit the definition of absolute functions and objects that use the @ address construct. Instead,
place __at(address) after the identifier in the definition.
int foobar @ 0x100; // oops -- use __at(0x100) instead
But my project
does not have the "Use CCI Syntax" checkbox checked... So why the error?
XC8 v2.20
Update: I found this post on the Microchip forum (
https://www.microchip.com/forums/m1058706.aspx), it seems the errors also relate to C99 mode being the new default (but only since XC8 v2.00).
Whole can of worms...
(It is interesting that C99 only now makes it to default in 2020! )