Programming/C&C++ 12

Misra-C rule 10.6

얼마전 회사에서 담당했던 소스코드 정적검증 도중 검출된 문제와 관련하여 일주일 가량을 어떻게 리포팅 해야할까 고민하다 Misra-C rule 10.5 에서 이유를 찾았다. Rule 10.5의 내용은 다음과 같다. 10.5 (required): If the bitwise operators ~ and > 4; /* not compliant */result = ((unsigned char)(~port)) >> 4; /* compliant */ 사실 bitwise 연산자에도 integral promotion이 적용된다는 것은 모르고 있었다. C99에도 언급이 되어 있었던 부분인데 사실 이 부분은 사용하는 컴파일러마다 underlying type을 어떻게 처리할지는 다르기 때문에 유심히 살펴볼 필요가 있을 것 같..

Programming/C&C++ 2014.09.15

문자열 처리

일반적으로 우리는 한 문자(Character)를 처리하기 위해서는 1바이트가 필요하다고 생각한다. 하지만 유니코드를 위해서는 UCS-2(2바이트)가 필요하다. 유니코드는 비주얼 베이직, COM, 윈도우NT/2000/XP에서 기본 문자열 타입으로 사용하고 있다. C++코드에서는 문자열을 char 대신에 wchar_t('wide char')로 선언하는 동시에, strr 함수를 대신해 wcs 함수를 사용할 수 있다. 예를 들면 strcat과 strlen 대신에 wcscat과 wsclen을 사용할 수 있다. C코드에서는 상수 UCS-2문자열을 생성하려면 다음과 같이 문자열 앞에 L만 붙이면 된다. L"Hello"

Programming/C&C++ 2007.01.21

[C]scanf의 오류

int a, b; char c; ... scanf("%d", &a); scanf("%d", &b); scanf("%c", &c); .... 는 우리가 일반적으로 사용하는 scanf의 형태이다. 그러나 여기서 scanf를 위와 같이 사용하면 3번째 문자는 입력받을 수 없다. 두번째 값을 입력받고 버퍼에 남아있는 엔터값(ASCII 10)이 바로 들어가기 때문이다. 여러가지 해결 방법이 있을 수 있겠지만 간단한 방법은 다음과 같다.(만일 windows버젼에서 프로그래밍 한다면 fflush를 사용할 수 있다) int a, b; char c; ... scanf("%d", &a); fflush(stdin); scanf(" %d", &b); fflush(stdin); scanf(" %c", &c); fflush(st..

Programming/C&C++ 2006.04.27

[퍼옴]전처리기

c컴파일러는 원시프로그램을 컴파일하기 전에 전처리하는 단계를 거치게 되는데요.. 이는 전처리기에 의해서 실행이되죠.. 전처리기 커맨드는 아래와같습니다.. #include ... file삽입 #define ... macro정의 #undef ... macro해제 #if #ifdef #endif ... 조건컴파일 #else #elif ... 조건컴파일 #line ... 행번호 부가 #pragma ... 컴파일러에게 option사용 #error ... 전처리기 기술 오류 표시 # ... 행 무시 지령 한번쯤은 다보았을 문법입니다.. 주의할점은 전처리기의 명령은 한행에 기술하는것을 원칙으로 하기때문에 한행을 초과했을시에는 \기호를 행의 맨뒤에 넣어줘야합니다.. 저기호는 연결표시이기때문에 맨마지막행에서는 연결할행이..

Programming/C&C++ 2006.03.09

[C++]전처리기

C/C++에서 #으로 시작하는 것은 지시어로써 컴파일러에게 무언가를 알릴 때 사용한다. 대표적인 것이 #include로 컴파일러에게 특정 파일을 포힘시키라고 알리는 역할을 한다. #ifndef (#ifdef) 와 #endif는 항상 함께 사용되며, 사용법은 다음과 같다. #ifndef(#ifdef) 이름 내용 #endif #ifndef는 이름에 해당하는 것이 #define문에 의해 정의되어 있지 않으면 컴파일할 때 내용을 포함시키고, 이름이 정의되어 있으면 포함시키지 말라고 컴파일렁에게 지시한다. #ifdef 는 #ifndef와 반대로 동작한다. 정의되어 있을 때 포함시킨다. ex) #ifndef __CMACHINE_H_INCLUDED__ #define __CMACHINE_H_INCLUDED__ 프로그램..

Programming/C&C++ 2005.11.23