본문 바로가기
반응형

프로그래밍 언어/C 언어39

[C/C++] #ifdef, #if defined() 비교 및 활용 [전처리기] #ifdef에서 #ifdef 형태와 활용 방법을 다루었다. #define IMSI #ifdef IMSI #define MAX_SPEED 10 #else #define MAX_SPEED 100 #endif int speed; int main() { // 최고 속도이하로 수치조정 if (speed > MAX_SPEED) speed = MAX_SPEED; } [C] [전처리기] #ifdef #ifdef 사용되는 형태는 아래와 같다. #ifdef {NAME} ... #else ... #endif {NAME} 선언 여부에 따라 컴파일 되는 부분이 달라진다. #define에서 선언여부와 관계 있지 정의 여부와는 관계가 없다. #define TEST.. zoosso.tistory.com [예제 코드] #.. 2022. 9. 1.
[C 전처리기] #error 활용 예제 #error 지시문은 전처리 과정에서 개발자에게 제약 사항 위반을 알리는데 유용하다. 사용 형태는 아래처럼 정의되지 않을 때 Compile Error 되도록 한다. 복잡한(제약사항) 프로그램일 때 사용될 수 있다. #include #define ENGINE 0; void main() { #if ENGINE printf("Engine on.."); #else #error Engine Off.. #endif } 파일 구조가 단순하면 코드에서 빨간 밑줄을 바로 확인할 수 있다. 파일 구조가 복잡하더라도 빌드하면 오류 메시지를 확인할 수 있다. Compiler 종류나 버전 제약이 필요할 때도 활용 가능하다. 예를들어 c++ 아닌경우 error 처리할 수 있다. #if !defined(__cplusplus) #e.. 2022. 8. 11.
[C/C++] memmove() 함수 사용과 예제 함수 원형 void* memcpy (void* dest, const void* src, size_t num) • dest: 데이터가 복사될 곳 (void* 형) • src: 복사될 데이터가 위치하는 곳 (void* 형) • num: 복사할 크기 (byte 단위) → src 에 있는 영역에서 num 바이트 만큼 dest 영역으로 옮긴다. 중간에 버퍼를 이용하기 때문에 메모리를 옮길 때 dest 영역과 src 영역이 겹처도 문제가 없다. → dest 영역과 src 영역 크기는 num 이상이어야 한다. → 필요한 헤더 파일: 혹은 반환 값 dest (void* 형) 예제 (정수 배열 복사) #include #include int main() { int src[2][3] = { {1, 2, 3}, {4, 5, .. 2021. 11. 28.
[C/C++] memcpy 사용 방법 함수 원형 void *memcpy(void *dest, const void *src, size_t N); •dest: 데이터가 복사되는 영역 (To) •src: 복사할 원본 데이터 (From) •N : 복사할 크기 (Byte) → memcpy(복사 받는 메모리, 복사할 메모리, 크기); src 메모리 영역에서 dest 메모리 영역으로 N byte 만큼 복사 * 필요한 헤더파일: 혹은 반환 값 dest 포인터 (void* 형) 예제 (2차원 배열 복사) #include #include int src[][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int dest[3][3]; int main() { // 복사 전 for (int i = 0; i < 3; ++i) { for (in.. 2021. 11. 24.
[C/C++] do-while 문 형태와 활용 do-while문은 안에 있는 코드를 조건식과 상관없이 한 번 무조건 실행됩니다. 그 후에 조건식을 확인하고 반복 여부가 결정된다. 그렇기에 아래 코드는 i < 0 이지만 한 번 printf 가 실행되고 조건문에 걸려 반복문을 빠져나오게 된다. #include int main() { int i = 0; do { printf("안녕 세상아 [%d]\n", i); i++; } while (i < 0); } 중괄호 안에서 변화식을 조건문에 맞춰서 작성하지 않으면 반복이 끝나지 않고 무한 루프 되므로 주의! 위 코드를 while 문으로 변경한다면 아래와 같다. 물론 반복문 자체가 실행되기 위해서는 조건문 수정이 필요하다. 😒 #include int main() { int i = 0; printf("안녕 세상아 .. 2021. 11. 22.
[C] printf 서식 %d int 부호 있는 10진수 정수 %u unsigned int 부호 없는 10진수 정수 %o unsigned int 부호 없는 8진수 정수 %x, %X unsigned int 부호 없는 16진수 정수 %f float, double 10진수 방식의 부동소수점 실수 %e, %E float, double e 또는 E 방식의 부동소수점 실수 %g, %G float, double 값에 따라 %f와 %e 사이에서 선택 %c char 문자 %s char * 문자열 %p void * 포인터의 주소 값 %n int * 포인터의 주소 값 %lu unsigned long 부호없는 long %llu unsigned long long 부호없는 long Refernece - [BOJ] 1550 16진수 2021. 9. 14.
[C/C++] memset 사용시 주의사항 먼저 memset 함수의 기본적인 사용방법을 읽어보는 것을 추천드립니다. [C / C++] memset 함수 사용 memset 함수는 memory + set 으로 특정 메모리 공간에 지정한 값을 채워준다. 함수 원형 void* memset(void* ptr, int value, size_t num); → memset (시작 포인터, 설정할 값, 크기) ① void* ptr .. zoosso.tistory.com 예제 1 #include #include const int MAX_N = 2; int main() { int arr[MAX_N]; memset(arr, 1, sizeof(int) * MAX_N); for (int i = 0; i < MAX_N; i++) { printf("%d ", *(arr + .. 2021. 9. 11.
[C / C++] memset 함수 사용 memset 함수는 memory + set 으로 특정 메모리 공간에 지정한 값을 채워준다. 함수 원형 void* memset(void* ptr, int value, size_t num); → memset (시작 포인터, 설정할 값, 크기) ① void* ptr 메모리 시작 주소 ② int value 설정하고자 하는 값 int 타입으로 받지만 내부에서는 unsigned char (1 byte)로 변환 ③ size_t num 메모리 크기 (바이트 단위) 주로 sizeof() 를 활용한다. 반환 - 성공하면 첫번째 인자로 들어간 ptr 반환 - 실패하면 NULL 반환 헤더파일 (C) #include 혹은 #include (C++) #include 예시 [예제 1] #include #include const i.. 2021. 9. 11.
[C] typedef enum 활용 [C] 열거형 타입 enum 이란?을 먼저 읽고 오시는 것을 권장 드립니다. enum 타입은 typedef 키워드와 주로 함께 사용된다. typedef는 타입의 별칭을 생성하고 실제 타입 이름 대신 별칭을 사용할 수 있게 한다. #include typedef enum Season { SPRING, SUMMER, FALL, WINTER. }SEASON; int main(void) { SEASON birthday = FALL; printf("%d\n", birthday); } typedef로 명시적 타입을 사용하면서 버그와 에러를 줄일 수 있다. #include #include using namespace std; typedef enum Season { SPRING, SUMMER, FALL, WINTER, .. 2021. 9. 11.
[C] 열거형 타입 enum 이란? enum 타입이란? #include enum Day { Sunday, Monday = 10, Tuesday, Wednesday, Thursday = 20, Friday, Saturday }; int main() { printf("Sunday : %d \n", Sunday); printf("Monday : %d \n", Monday); printf("Tuesday : %d \n", Tuesday); printf("Thursday : %d \n", Thursday); printf("Friday : %d \n", Friday); } - 초기값을 지정하지 않으면 첫번째 원소의 값 = 0 - 중간에 초기값을 별도로 설정할 수 있다. (나머지 원소도 그에 맞춰 1씩 증가) - 마지막 닫는 중괄호 「 } 」 뒤에 세.. 2021. 9. 10.
반응형