In short, The answer to this question is completely compiler dependent.
Explanation,
Between consecutive "sequence points" an object's value can be modified only once by an expression.
Source : https://learn.microsoft.com/en-us/cpp/c-language/c-sequence-points?view=msvc-170
So as you can read from above statement that an object’s value can be modified only once between sequence points. But in the question that has been asked by you the value of “a” is being modified thrice which will give undefined results, as according to the standards of c programming this is not correct way to modify any data object.
But online compilers and offline compilers gives different results according to their design therefore we will get different results on different compilers.
What are Sequence Points?
int main(){
int a = 1; //This semicolon is a sequnce point. Means, from here a statement ends and a new statement begins.
int b = ++a * ++a * ++a; // This semicolon is another sequnce point. Here the statement which was started earlier ends and new statement begins.
printf("%d", b );
return 0;
}
The statement int b = ++a * ++a * ++a is written between two consecutive sequence points. So we cannot modify the value of variable a more than once. If we try to do something like this we will get different results on different compilers.
What is a data object ?
A data object is a memory location that stores information used by the program.
A variable is a name used in the program to refer to a data object.
So if you write:
int a;
It tells the compiler to create a data object that can hold an integer, and in the program you can use the name a to access that data object.
Source : https://stackoverflow.com/questions/40441612/difference-between-variable-and-data-object-in-c-language