목차 printf_s 개요 📌 함수 원형 int __cdecl printf_s(const char *format [, argument]...); 💡 __cdecl ? C 및 C++ 프로그램의 기본 호출 규칙으로 함수 호출용으로 스택에 쌓은 파라미터를 호출한 함수에서 제거해 주는 Convention(협약) 이다. cdecl은 C DECLaration라는 뜻으로 declaration은 선언이라는 뜻으로 직역하면 C 선언이라는 뜻이 된다. 🎯 필수 해더 🎯 매개 변수 format 서식을 지정한다. argument 선택적 인수 🎯 반환값 출력된 문자 수 또는 오류가 발생시 음수 값을 반환한다. 🎯 설명 printf_s 함수는 문자와 값의 서식을 지정하여 표준 출력 스트림 stdout에 출력한다. printf 와..
[C언어/C++] #pragma once 사용 목적 #paragma once는 C/C++에서 헤더 파일의 중복 포함을 방지하는 데 사용하는 전처리문이다. 헤더가 중복으로 포함되었을 경우 C 프로그램이 Linking 작업 중 오류를 일으키기 때문에 중복 되는 경우 전처리 과정에서 중복을 제거하는 기능이다. 💡 #pragma once는 C++프로젝트에서 헤더 파일을 만들 때 #pragma once를 사용하는 것은 일반적으로 좋은 습관으로 권장된다. 하지만 환경에 따라 특정 제한 사항이나 이슈가 있을 수 있으므로 다른 방법도 고려할 필요가 있다.
구조체 비트 필드/공용체를 함께 사용하기 목차 구조체 비트 필드 지금까지 구조체의 멤버는 각 자료형 크기만큼 공간을 차지했다. 하지만 구조체 비트 필드를 사용하면 구조체 멤버를 비트 단위로 저장할 수 있다. 특히 CPU나 기타 칩의 플래그를 다루는 저수준(low level) 프로그래밍을 할 때 기본 자료형보다 더 작은 비트 단위로 가져오거나 저장하는 경우가 많으므로 구조체 비트 필드가 유용하게 사용된다. C99 표준에서는 비트 필드로 사용할 수 있는 자료형을 _Bool, signed int, unsigned int, int로 규정하고 있지만 대부분의 컴파일러에서는 모든 정수 자료형을 사용할 수 있다. 보통은 비트 필드에 부호 없는(signed) 자료형을 주로 사용한다. 단 실수 자료형은 비트 필드로 사용..
네임 맹클링(Name Mangling) 코드에서 선언한 함수나 변수의 이름을 컴파일러가 컴파일 단계에서 일정한 규칙을 가지고 변형하는 것. 맹글링을 영어 사전에서 찾아보면 "난도질 하다", "형태를 알 수 없게 짓이기다"라고 되어 있는데 C++는 컴파일러 단계에서 컴파일러가 함수나 변수 이름을 크게 바꾼다. C는 컴파일러의 이 작업을 이름 장식(Name Decoration)이라고 표현하는데 이름 앞, 뒤에 간단한 규칙을 가진 문자를 붙이는 정도로 맹글링 수준은 아니다. 맹글링이 필요한 이유 C에서는 링커가 함수를 이름으로만 구분하고, C++에서는 매개변수까지 사용해서(시그니처) 구분한다. 즉, 똑같은 이름의 함수라도 매개변수에 따라 링커는 달리 구분한다. 같은 이름의 함수가 여럿 존재할 때 어떤 함수를 ..
비트 연산으로 변환 배열의 값은 float형으로 5.05 를 나타낸다. TCP/IP 통신을이용해 데이터를 수신하니 리틀엔디언 효과로 자리 변환이 일어났다. 위와 같은 이유로 아래와같이 배열을 역순으로 비트연산 하였다. iii 는 unsigned long type 이고, ii 는 float type 이다. 0xFF 는 부호가 없는 정수일경우 없어도 무방하지만 부호가있는 정수는 0xFF를 and연산해주어야 한다.(부호확장 방지) 빨간 박스의 코드와 같이 가져온값은 float로 꼭 변환하여 사용해야 한다. union 사용 union 구조체로 선언하면 동일한 값이 자동으로 들어간다. unsigned char일경우 부호가 없기 때문에 부호확장시 전부 0을 채워넣는다. 그래서 &0xFF가 필요 없다. 결과
C언어 오류처리 error ㆍerror 은 에 다음과 같이 정의되어 있다. extern int errno; 선행처리기 문자열 정의 설명 E2BIG 너무 긴 인수 목록 EACCESS 접근 거부 EAGAIN 재시도 EBADF 잘못된 파일 번호 EBUSY 이미 사용 중인 디바이스나 자원 ECHILD 자식 프로세스 없음 EDOM 함수 영역을 넘어선 수학 인수 EEXIST 이미 존재하는 파일 EFAULT 잘못된 주소 EFBIG 너무 큰 파일 EINTR 인터럽트가 걸린 시스템 호출 EINVAL 유효하지 않은 인수 EIO 입출력 오류 EISDIR 디렉터리임 EMFILE 열린 파일이 너무 많음 EMLINK 너무 많은 링크 ENFILE 파일 테이블 넘침 ENODEV 그런 디바이스 없음 ENOENT 그런 파일이나 디렉터리..