C언어에서 stdio.h은 무엇일까?

Dohyun Park·2023년 4월 4일
0

C언어 기초

목록 보기
1/3
//C언어에서 Hello, World! 를 출력하기 위한 코드
#include <stdio.h>

int main() {
	printf("Hello, World!");
}
#파이썬에서 Hello, World! 를 출력하기 위한 코드
print("Hello, World!")

프로그래밍 언어를 공부할 때 보통은 Hello, World! 를 출력하는 것을 처음 배우지 않을까 싶습니다. 여러 프로그래밍 언어가 있는데, C언어에서는 무언가 출력하려면 printf라는 함수를 사용해야 합니다. printf라는 함수를 사용하려면 stdio.h라는 헤더 파일을 프로그램에 포함해야하는데, 이에 대해 정리해 보았습니다.

#include <stdio.h>는 무엇일까?

#include <stdio.h>

#include는 소스코드 파일 내에서 다른 헤더파일이나 라이브러리를 포함시키는 역할을 합니다.

위 소스코드를 해석하자면, stdio.h라는 헤더파일을 현재 소스코드에 포함한다는 뜻이 되겠죠.

stdio.h 헤더 파일은 무엇일까?

C Standard Input and Output Library 의 약자로, 입/출력을 실행하기 위한 헤더 파일입니다.

이 라이브러리는 키보드, 프린터, 터미널 또는 시스템에서 지원하는 다른 유형의 파일과 상호 작용하는 데 사용되는 스트림을 사용합니다. 스트림은 일관된 방식으로 이러한 것들과 상호 작용하는 추상화입니다. 물리적 미디어의 개별 특성과는 독립적으로 모든 스트림에는 유사한 속성이 있습니다.

스트림은 cstdio 라이브러리에서 FILE 객체에 대한 포인터로 처리됩니다. FILE 객체에 대한 포인터는 스트림을 고유하게 식별하며 해당 스트림을 사용하는 작업의 매개 변수로 사용됩니다.

또한 모든 프로그램에서 자동으로 생성되고 열리는 세 개의 표준 스트림 stdin, stdout 및 stderr도 있습니다.

스트림 속성(reference 인용)

스트림은 사용할 수 있는 함수 및 이러한 함수가 통과하는 데이터를 처리하는 방식을 정의하는 몇 가지 속성을 가지고 있습니다. 이러한 대부분의 속성은 fopen 함수를 사용하여 스트림이 파일과 연결될 때 (열릴 때) 정의됩니다.

  1. 읽기/쓰기 접근(Read/Write Access)
    스트림이 연결된 물리적 미디어에 대해 읽기 또는 쓰기 액세스(또는 둘 다)를 갖는지 여부를 지정합니다.
  2. 텍스트/바이너리
    텍스트 스트림은 각각이 새 줄 문자로 끝나는 일련의 텍스트 라인으로 나타납니다. 응용 프로그램이 실행되는 환경에 따라 일부 문자 변환이 텍스트 스트림에서 발생하여 특수 문자를 환경의 텍스트 파일 사양에 맞게 조정할 수 있습니다.
    반면에 바이너리 스트림은 번역 없이 물리적 미디어에서 쓰여지거나 읽히는 문자의 시퀀스이며, 스트림에 쓰이거나 읽히는 문자와 일대일 대응을 갖습니다.
  3. 버퍼(Buffer)
    버퍼는 연관된 파일이나 장치에 물리적으로 읽거나 쓰기 전에 데이터가 축적되는 메모리 블록입니다. 스트림은 완전 버퍼링(fully buffered), 줄 버퍼링(line bufered) 또는 버퍼링되지 않은(unbuffered) 상태가 될 수 있습니다.
typedescription
완전 버퍼링스트림에서는 버퍼가 가득 차면 데이터가 읽혀지거나 쓰여지고
줄버퍼링 스트림새 줄 문자가 나타나면 이루어짐
버퍼링되지 않은 스트림문자가 가능한 한 빨리 읽혀지거나 쓰여질 것
  1. 방향성(Orientation)
    스트림을 열 때는 방향성이 없습니다. 스트림에서 입력/출력 작업이 수행되는 즉시 수행된 작업에 따라 (일반적으로 에 정의된 함수는 바이트 방향성을 갖고, 에 있는 함수는 와이드 방향성을 갖습니다) 바이트 방향성 또는 와이드 방향성을 갖게 됩니다. 자세한 내용은 cwchar를 참조하세요.

functions

파일 관련 함수(remove, rename, tmpfile, tmpnam, fclose, fflush, fopen, freopen, setbuf, setvbuf), Formatted I/O(fprintf, fscanf, printf, scanf, snprintf, sprintf, sscanf, vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, vsscanf), 문자 입출력(fgetc, fgets, fputc, fputs, getc, getchar, gets, putc, putchar, puts, ungetc) 등 여러 함수가 있습니다.

printf

#include <stdio.h>

int main() {
	printf("Hello, World!");
	return 0;
}

scanf

Visual Studio에서 실행 시 아래처럼 보안 경고가 뜰 수 있습니다. 오버플로우 취약점때문인데, 이를 해결하려면 scanf를 scanf_로 변경하거나 코드 상단에 #define _CRT_SECURE_NO_WARNINGS 을 넣어주면 정상적으로 실행됩니다.

'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

#include <stdio.h>

int main() {
	int a;
	a = scanf("What's your favorite number?");
	return 0;
}
profile
공부한 내용을 기록하고 생각을 정리합니다.

0개의 댓글