#define 관련해서 궁금한 점이 있습니다(c 언어)
글쓴이: chocokeki / 작성시간: 금, 2018/07/20 - 9:24오전
#define ADDR 0x1000 function(ADDR);
#define ADDR 0x1000 uint32_t addr = (uint32_t)ADDR; function(addr);
이 두 코드의 동작 차이가 있을 수 있나요?
예를 들어 두번째 코드는 극단적인 상황에서 addr에 define 된 데이터가 저장되고 function이 호출되기 전
addr 의 값이 변해서 function에 ADDR 값이 전달되지 않을 수 있다
하지만 첫번째 코드는 무조건 ADDR이 전달된다 라든지 등등 안정성 관련 조언을 받고 싶습니다.
생각해보니까 첫번째 코드도 function이 호출될 때 cpu register에 인자가 들어갈 때 ADDR 의 데이터 값이 다르게 전달 될 수도 있지 않나요?(해킹이나 디버거나 전기적인 요소나 등등등 극단적인 경우)
매우 쓸모없어보이는 이상한 질문이지만 양해 부탁드립니다
그리고 추가로 제가 종종 아래와 같은 코드를 작성합니다
별로 좋은 코드가 아닌가요? (예를 들어 굳이 변수에 대입을 해야하냐 등)
#define ADDR 0x1000 const uint32_t addr = const (uint32_t)ADDR; function(addr);
Forums:
addr 값이 function 콜이 일어나기전에
addr 값이 function 콜이 일어나기전에 변경되면 그럴 수 있고요. 그 이유는 크래커가 해당 변수를 바꾼다든지 해서...
글고 보통은 define 된 값 자체가 const 의 성격을 가지는데 또 한번 가져올 필요는 없습니다. 리팩토링 원칙에서도 되도록이면 그때 그때 필요한 변수나 함수를 쓰면 된다고 합니다. 성능상 중요한 이슈가 아니면은요.
아래 두 코드가 어떠한 차이냐의 질문이 되겠죠.
아래 두 코드가 어떠한 차이냐의 질문이 되겠죠.
세벌 https://sebuls.blogspot.kr/
댓글 달기