This line of code invokes undefined behaviour because it accesses a variable (a) more than once between sequence points where one of those accesses is writing to the variables value.
Undefined behaviour is bad because under the action of undefined behaviour the program can literally do anything, it is not constrained in any way. You should avoid undefined behaviour at all costs.
Undefined Behaviour
You want to avoid undefined behaviour so find out what it is.
Sequence points
Sequence points are a basic part of the language notation, coupled with undefined behaviour by indicating when all side-effects of an operation have to be resolved. Read this and learn where they are.