Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[5859] Re:volatile 변수의 void 포인터 캐스팅
라스코니 [chouoo] 4206 읽음    2006-11-08 19:15
volatile이 단순한 키워드가 아닌것 같다는 말씀이 무슨 뜻인지....

volatile 을 그냥 써주신 건가요?

volatile은 컴파일러의 최적화를 방지하기 위해서 사용하는 겁니다.  volatile을 사용하지 않는다면 컴파일러는 변수를 레지스터로 할당할수도 있거든요. 하드웨어 컨트롤 소프트웨어에서는 메모리 번지 자체를 I/O로 쓸수 있기 때문에 이런 경우에 해당하는 변수에 volatile을 쓸수 있습니다.

volatile char str[10]; 이라는 곳에서 volatile이 필요한지가 일단 의문이고요. char 로 선언하셨으면 char로, volatile char로 선언하셨으면 volatile char로 받아야 합니다.

memset((void *)str, 0, 10); 로 쓰는 것은 괜찮아 보입니다. 어짜피 포인터의 시작 주소가 중요한 것인지 void * 던지 volatile char * 던지 결과는 똑같습니다.

근데 저는 char str[10] 의 선언에서 volatile이 꼭 필요한지에 대한 재고가 필요하다고 보여지네요.  물론 대부분 레지스터의 수를 확보하기 위해서 volatile을 쓰곤 합니다.




권기식.with☆ 님이 쓰신 글 :
: 안녕하세요.
:
: 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는 서로 다른 데이터 형이라서 그렇다는군요.

+ -

관련 글 리스트
5839 volatile 변수의 void 포인터 캐스팅 권기식.with☆ 5846 2006/10/25
5859     Re:volatile 변수의 void 포인터 캐스팅 라스코니 4206 2006/11/08
5971         Re:Re:volatile 변수의 void 포인터 캐스팅 서영섭 5781 2007/03/31
5861         Re:Re:volatile 변수의 void 포인터 캐스팅 권기식.with☆ 4035 2006/11/08
5846     Re:volatile 변수의 void 포인터 캐스팅 남병철.레조 3323 2006/11/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.