Порядок оценки аргументов функции является неуказанным от C99 В§6.5.2.2p10:
порядок оценки функционального указателя, действительных аргументов и подвыражений в действительных аргументах является неуказанным, но перед фактическим вызовом существует точка последовательности.
Подобная формулировка существует в C89.
Кроме того, Вы изменяете pa
многократно без прошедших точек последовательности, который вызывает неопределенное поведение (оператор запятой представляет точку последовательности, но запятые, разграничивающие аргументы функции, не делают). Если Вы поднимаете предупреждения на своем компиляторе, он должен предупредить Вас об этом:
$ gcc -Wall -W -ansi -pedantic test.c -o test
test.c: In function ‘main’:
test.c:9: warning: operation on ‘pa’ may be undefined
test.c:9: warning: operation on ‘pa’ may be undefined
test.c:13: warning: operation on ‘pa’ may be undefined
test.c:13: warning: operation on ‘pa’ may be undefined
test.c:17: warning: operation on ‘pa’ may be undefined
test.c:17: warning: operation on ‘pa’ may be undefined
test.c:20: warning: control reaches end of non-void function
Нет, контекст Spring будет выбирать одно определение компонента вместо другого. Какой из них он выберет, зависит от того, в каком порядке файлы загружаются в контекст во время инициализации.
Ведение журнала должно указывать на то, что одно определение компонента перекрывает другое.