안녕하세요.
avr-gcc로 마이크로 컨트롤러 프로그램을 짜다가 생긴 의문점인데 c 공통 사항인 것 같아 질문 드립니다.
예를 들어서...
volatile char str[10];
이라고 변수를 선언했고.. 함수내에서 이를 0으로 초기화하기 위해 memset 함수를 사용했습니다.
memset(str, 0, 10);
이렇게 하면 avr-gcc 컴파일러에서는 "passing argument 1 of 'memset' discards qualifiers from pointer target type" 이라는 경고 메시지를 띄우고 실행에는 문제가 없습니다.
이를 다시 Borland C++(Builder 2006)에서 컴파일해보니 volatile char *를 void *로 변환할 수 없다며 Error가 나네요.
volatile... 단순히 생각할 키워드가 아닌 것 같네요.
어찌하여 이런 에러가 나며...
memset((void *)str, 0, 10); 로 void * 형으로 캐스팅해서 쓰니 에러가 없어지는데 정상적인 해결책인지 궁금합니다.
포인터... 알면 알수록 어렵네요.. ^^
ps. 같은 맥락으로 한 가지 더 적어봅니다.
volatile로 선언된 변수의 경우 이를 인자로 넘겨받는 함수의 인자를 volatile로 선언하니 경고가 뜨지 않는군요.
자료를 좀 찾아보니 volatile char와 char는 서로 다른 데이터 형이라서 그렇다는군요.
|