본문 바로가기

CERT C/표현식

(5)
[CERT C/표현식] (5) NULL 체크의 중요성 의미 NULL은 포인터 변수가 잘못된 주소를 가리키지 않도록 위험성이 없는 0 번지 주소를 가지고 있어서 초기화를 하는 데 많이 쓰이곤 한다. 문자열과 포인터를 배워오면서 NULL의 개념에 대해서는 헷갈릴 수 밖에 없다. NULL 문자 ( \0 ), NULL pointer ( NULL ), NULL string ( "" )의 차이점에 대해서도 알아보자. 표기 설명 NULL 문자 "\0" 문자열의 끝을 의미하는 문자로 아스키 코드 값 '0'이다. NULL pointer NULL 0 번지를 의미하며 대부분 플랫폼에서 Read-Only 영역이나 예약 영역으로 보호받는 주소이다. 그러므로 잘못된 주소를 가리키지 않도록 위험성이 없는 0번지 주소를 가르키도록 초기화를 하는 것이다. NULL string "" 아무..
[CERT C/표현식] (4) 함수 반환 값의 중요성 의미 여러 API와 라이브러리에서 제공해주는 함수의 반환 값은 함수가 작업을 성공 또는 실패했는지를 판단할 수 있는 지표이다. 많은 사람들이 라이브러리를 사용할 때 사용하는 많은 함수들에 리턴값이 있고 그 리턴값들이 의미하는 값들을 처리해주는 것이 프로그램을 작성할 때 매우 중요하다. 동작 방식 man 명령어 (UNIX/LINNUX의 경우) 구글링, document를 통해 함수의 반환값을 확인하고 여러 상황에서 일어날 수 있는 반환값에 대한 처리를 해주어야한다. 문제 코드 1. 함수의 리턴 값을 반드시 확인하자 출력을 예상해보기 #include void myflush(); int main() { int age; printf("Input age : "); scanf("%d", &age); myflush()..
[CERT C/표현식] (3) 포인터 연산 수행의 중요성 의미 포인터 연산은 주소에 대해서 연산을 하는 것을 의미하는데, 포인터에 더해지는 값은 자동적으로 포인터가 가리키는 데이터형으로 조정된다. 동작 방식 포인터 연산의 특징 (1) 주소상수 + 정수형 상수(n) -> 주소 상수 + (n * 주소상수에 해당하는 기억공간의 크기) (2) 주소상수 - 주소상수 -> 주소에 해당하는 기억공간 간의 첨자차이가 된다. 문제 코드 1. 단축 평가 방식을 신경써서 AND, OR 연산자를 사용하자. 출력을 예상해보기 #include #include #include #define BUFFER_SIZE 5 int getNumber(int *); int main() { int p; int buffer[BUFFER_SIZE]; int *bufptr = buffer; while(bu..
[CERT C/표현식] (2) 단축 평가 방식의 중요성 의미 단축 평가(short-circuit evaluation) 방식은 AND와 OR 논리 연산자에서 자주 사용되는 방식으로 첫 번째 피연산자로 평가가 완료되면 두 번째 피연산자는 평가하지 않고 끝내는 평가 방식이다. 동작 방식 연산자 좌측 피연산자 우측 피연산자 AND 거짓인 경우 평가 안함 OR 참인 경우 평가 안함 ※ 첫 번째 피연산자 평가가 완료가 되어서 뒤에 있는 피연산자가 실행되지 않으면서 원하지 않는 동작이 발생할 수 있다. 문제 코드 1. 단축 평가 방식을 신경써서 AND, OR 연산자를 사용하자. 출력을 예상해보기 #include #include #include #define BUF_SIZE 25 int getString(const char *, char **); int main() { i..
[CERT C/표현식] (1) 연산자 우선순위의 중요성 의미 연산자 우선순위란, C 언어에서 사용되는 수 많은 연산자들의 연산 순서를 의미한다. 보통 +, -보다 *, / 가 우선이고 비트 연산자 우선순위 정도까지 생각을 하는 분이 많을 것이라고 생각하는데 우리가 코드에서 보는 모든 기호에 우선순위가 부여되어있고 그 우선순위를 이해하다보면 포인터, 배열 등의 개념의 이해에 큰 도움이 될 것이다. 동작 방식 순위 명칭 연산자 결합방향 1 1차 연산자 () [] . -> -> 2 단항 연산자 + - ! ~ (type) sizeof ++ -- & * 4 가법 연산자 + - 5 Shift 연산자 > 6 관계 연산자 = 7 등가 연산자 == != 8 bit 곱 연산자 & 9 bit 차 연산자 ^ 10 bit 합 연산자 | 11 논리곱 연산자 && 12 논리합 ..