|
'프로그래밍'에 해당되는 글 2건
[폭주기관차, 2007/06/10 19:00, [Programming]/Visual C++ API/MFC]
오늘 로봇 공학 숙제를 하다가 처음 발견한 명령어 volatile
이런 명령어가 있는지 몰랐다. 인터넷으로 검색해보니 바로 나온다. 사전적 의미로는 '휘발성의'... 간단히 설명을 들어보니, 중간에 변수 내용이 변경될 수도 있다라는 것을 컴파일러에 알려준다는 것이다라고 되어있다. 무슨 말인지 도통 모르겠어서 좀더 예제를 찾아보았다. 쓰레드의 경우 아래와 같은 코드가 있다고 보자 void ThreadEntry(void* pParm){이 코드에서 보면 매개변수로 넘어오는 pParm은 외부에서 언제든 변경될 수 있는 값이다. 아마 쓰레드의 종료를 처리하는 변수 같은데 Debug모드에서는 아무 문제없이 잘 작동이 되나 Release모드에서는 오작동을 일으키게 된다. 그 이유는 컴파일러가 코드를 최적화하기 때문이다. 위의 코드를 보면 while반복문을 도는 동안 pbExit의 변수는 사용하지를 않는다. 변수를 읽는 일만 하고, 변경을 가하는 일 따위는 하지 않기 때문에 똑똑한 컴파일러는 굳이 *pbExit의 값을 매번 비교할 필요가 없다고 생각하고 비교하는 코드를 제거해버린다. 그럼 무한루프트에 빠지게 되는 것이다. 해결 방법은 아래와 같이 해주면 된다. volatile bool* pbExit = static_cast<volatile bool*>(pParm); 또 다른 예를 보자. int i;이 코드 역시 j는 항상 일정한 값만 갖게 된다. 똑똑한 컴파일러는 역시 최적화를 아래와 같이 시켜준다. j=sqrt(2.8)+log(3.5)+56;물론 외부에서 j의 값을 바꾸지 않는한 오류는 나지 않고 위의 코드와 완전 동일하게 수행이 될 것이다. 하지만 만약 j가 전역변수이고, 쓰레드로 동시에 공유하는 변수를 사용한다고 가정하면 예기는 달라진다. 프로그래머가 전혀 의도하지 않은 결과값을 초래할 수도 있으므로 이 점을 유의하면서 프로그램을 짜도록 하자. 출처 : 돌아이님의 블로그 글 Trackback Address :: http://kongmks.cafe24.com/trackback/228
[폭주기관차, 2007/01/30 15:25, [Computer]/Software]
MS-DOS의 와일드 카드(Wild Card; Unix에선 Glob Pattern이라 불림)는 *과 ?가 있다.
(내가 중학교때 배우기론 3가지였던걸로 기억하는데 한 가지가 기억이 안난다...ㅡㅡ 그게 . 이었던가?? ) C:\> dir a*.jp? 명령어를 치면 파일이름은 a로 시작되면서 확장자는 jp로 시작되며 뒤에 한 글자는 아무 문자나 오는 파일을 검색하라 라는 의미가 된다. 정규표현식은 파일의 이름 뿐만 아니라 파일 내용에까지 이런 패턴을 기술 할 수 있는 방식을 말한다. 단, 정규표현식은 언어, 혹은 툴마다 사용 방법이 약간씩 상이한 경우가 있다. 예) "^The" => The로 시작하는 문자열 "^The$" => The로 시작되고 The로 끝나는 문자열 "[A-Z]" => A부터 Z사이의 아무 한 글자 "[Aa]" => A나 a의 한 문자 참고 : ileksiah님의 블로그 원문 글 Trackback Address :: http://kongmks.cafe24.com/trackback/67
|
||





