C 언어 변수 초기화 관련 질문입니다.
글쓴이: gata102 / 작성시간: 화, 2014/03/11 - 9:26오후
너무 쉬운 질문을 하는 게 아닌지 모르겠네요.
프로그래밍을 정식으로 배운건 아니고... 전공에서 필요하다가 보니... 필요한 부분만 조금 아는 C유저 입니다. ㅡ_ㅡ;;
전 주로 MCU를 이용해 시스템 제어 코드를 많이 짜는데, 범용성을 올리기 위해 프로그램을 수정하고 있습니다.
제가 하고 싶은 기능은 define을 통해 몇몇 파라미터를 바꾸면 컴파일러가 미리 계산해서 변수를 초기화 하는 코드를 만들고 싶습니다.
예)
#define param1 1.2
const float Coeff1 = param1 * param1 ;
... 뭐 이런 형식으로 수정중인데요... define에 길게 늘어서 쓰면 ... 연산시간이 그대로 쭉 늘어지더군요 ㅠ_ㅠ..
1차적인 파라미터 연산은 위처럼 해결되는 데요.. 문제는...
const float Coeff1_s = Coeff1 * Coeff1 ;
... 이렇게 또 선언해야 할 일이 많은데 에러를 뿜내요... error #28: expression must have a constant value...
두세번 변수를 갖다써서 초기화 하면 코드가 상당히 많이 정리될 거 같은데... ^^;;
즉 제 질문은 .... --> 상수화된 변수를 이용해 또 상수를 선언하고 싶어요... ( 컴파일러가 꼭 미리 계산해서 빌딩해야됨 ..... )
방법이 있을까요? ..
고수분들 도와주세요 ~_~;;
Forums:
말씀하시는 "미리 계산하는" 과정은 컴파일러가 아닌
말씀하시는 "미리 계산하는" 과정은 컴파일러가 아닌 전처리기(pre-processor)에 의해서 이루어 집니다.
const float Coeff1_s = Coeff1 * Coeff1;
가 에러가 나는 이유는 우항에 상수가 아닌 상수형변수가 왔기 때문입니다.
원하시는 결과를 얻기 위해서는
위와 같이 작성하시면 될 거 같습니다.
답글 감사합니다. 전처리기가... 빌딩이 끝나면
답글 감사합니다.
전처리기가... 빌딩이 끝나면 코드 실행시간에 영향을 안 미치는 건 같은 거죠?.. ^^; 제가 잘 이해했나 모르겠네요. 위의 변수들을 ISR에서 파라미터들을 많이 불러서 쓰는데...
문제는 define은 연산을 해서 들어가는 게 아니라... 그 부분이 그대로 copy되는 걸로 알고 있습니다.
덕분에 연산시간이 전부 늘어나버리는 문제가 발생하더군요...
const 는 연산 시간이 일단 늘어나지는 않는데... define 처럼 중복해서 쓸수가 없더군요...
define처럼 중복해서 쓰면서... const처럼 계산이 미리 됐으면 좋겠네요 ..
제대로된 질문인지도 모르겠네요 ㅠㅠ..
엉겁결에C유저
최적화 옵션 아예 안쓰시나요? 보통 컴파일러는 상수
최적화 옵션 아예 안쓰시나요? 보통 컴파일러는 상수 계산은 컴파일타임에 알아서 처리하는 최적화를 합니다.
ISR 코드가 nop()가 좀 많고...
ISR 코드가 nop()가 좀 많고... timing이 매우 중요한 코드라서요..
최적화는 --; 전혀 안 시켰습니다.
거의 기계어라고 보셔도 무방할 정도입니다.
최적화 시키면 파형이 좀 깨져서... --> 시스템 돌리면 아마 폭발할듯
... 원체 기계어같은 코드라서 최적화 없이 하고 싶은데 ...
최적화를 부분적으로 시키는 방법은 찾아봐야 겠네요.
답변 고맙습니다.
엉겁결에C유저
댓글 달기