Programming/C&C++
-
Misra-C rule 10.6Programming/C&C++ 2014. 9. 15. 17:07
얼마전 회사에서 담당했던 소스코드 정적검증 도중 검출된 문제와 관련하여 일주일 가량을 어떻게 리포팅 해야할까 고민하다 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++ 2007. 1. 21. 17:32
일반적으로 우리는 한 문자(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"
-
-
[C]scanf의 오류Programming/C&C++ 2006. 4. 27. 13:55
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. 3. 9. 01:50
c컴파일러는 원시프로그램을 컴파일하기 전에 전처리하는 단계를 거치게 되는데요.. 이는 전처리기에 의해서 실행이되죠.. 전처리기 커맨드는 아래와같습니다.. #include ... file삽입 #define ... macro정의 #undef ... macro해제 #if #ifdef #endif ... 조건컴파일 #else #elif ... 조건컴파일 #line ... 행번호 부가 #pragma ... 컴파일러에게 option사용 #error ... 전처리기 기술 오류 표시 # ... 행 무시 지령 한번쯤은 다보았을 문법입니다.. 주의할점은 전처리기의 명령은 한행에 기술하는것을 원칙으로 하기때문에 한행을 초과했을시에는 \기호를 행의 맨뒤에 넣어줘야합니다.. 저기호는 연결표시이기때문에 맨마지막행에서는 연결할행이..
-
-