본문 바로가기

Lecture/AVR

Err operation on 'var'may be undefined

에러 원문 

Description Resource Path Location Type
operation on 'j' may be undefined uart.c /110725_axis1 line 106 C/C++ Problem



내가 사용한 코드는 아래와 같다.
입력받은 데이터를 파싱하는 함수이다. 

if(k==4) {add=(str[j]-0x30)*1000 + (str[++j]-0x30)*100 + (str[++j]-0x30)*10 + str[++j]-0x30;}

나는 당연히 왼쪽부터 연산이 될꺼라고 생각하며 코드를 작성하였다.

그런데 문제는 연산은 오른쪽 부터 왼쪽으로 가며 연산된다는 것이다..
그렇다면 내가 원하는 반대의 순서대로 적었어야 하는데.....
더욱이 이상한건 제대로 실행된다. 

이게 컴파일러마다 조금씩 다른가? 아니면 컴파일 옵션이나....

어셈파일을 비교하거나 출력하여 확인을 해봐야 하는 문제이긴 하지만.....

지금은 그럴만한 시간이 없으므로 일단 넘어가도록 하자.... (MCU로 테스트 중이라 상당히.....번거롭다....)

주의할 점은 증감연산자가 들어갈 경우 순서를 고려해줘야한다는거다.....
(가장 안전한 방법은 끊어서 연산하는거겠지?....   속도차이가 많이나려나??)