This quote from the C Standard (6.4.5 String literals) will be useful for you
7 It is unspecified whether these arrays are distinct provided their
elements have the appropriate values. If the program attempts to
modify such an array, the behavior is undefined.
The first statement of the quote says that two string literals with the same values can be stored in the static memory either as distinct arrays or as the same one array,
So in fact this expression in the condition of the if statement
#define SOMEDATA "ABC"
//...
if ( SOMEDATA == SOMEDATA )
{
//...
}
can yield either true or false depending on the settings of options of the compiler.
That is these two calls of memcpy
memcpy(SOMEDATA, "OK", sizeof("OK"));
//..
memcpy(SOMEDATA, "VERY_LONG", sizeof("VERY_LONG"));
that are equivalent to
memcpy("ABC", "OK", sizeof("OK"));
//..
memcpy("ABC", "VERY_LONG", sizeof("VERY_LONG"));
can write either to the same extent of memory or to different extents of memory.
The second statement of the quote says that any attempt to change a string literal results in undefined behavior of the program.
Take into account that according to the C Standard the function main without parameters used in a hosted environment shall be declared like
int main( void )
^^^^
Though some compilers as the Microsoft compiler allows to use the type void as the return type of main it is better to follow the C Standard.