C++ 코드를 보면 누구는 stdio.h를 쓰고 cstdio를 쓰는데 무슨 차이일까?

간단히 설명하면 cstdio는 std 네임스페이스를 사용한다

 

// cstdio standard header
#pragma once
#ifndef _CSTDIO_
#define _CSTDIO_
#include <yvals.h>
#include <stdio.h>

// undef common macro overrides
 #undef clearerr
 #undef feof
 #undef ferror
 #undef getc
 #undef getchar
 #undef putc
 #undef putchar

// TRANSITION: Boost nonconformingly uses this macro
#define _FPOSOFF(fp)  ((long long)(fp))

typedef FILE _Filet;

 #ifndef RC_INVOKED
_STD_BEGIN
#pragma warning(push)
#pragma warning(disable: 4995) // name was marked as #pragma deprecated

using _CSTD _Filet; using _CSTD _Mbstatet;

using _CSTD size_t; using _CSTD fpos_t; using _CSTD FILE;
using _CSTD clearerr; using _CSTD fclose; using _CSTD feof;
using _CSTD ferror; using _CSTD fflush; using _CSTD fgetc;
using _CSTD fgetpos; using _CSTD fgets; using _CSTD fopen;
using _CSTD fprintf; using _CSTD fputc; using _CSTD fputs;
using _CSTD fread; using _CSTD freopen; using _CSTD fscanf;
using _CSTD fseek; using _CSTD fsetpos; using _CSTD ftell;
using _CSTD fwrite; using _CSTD getc; using _CSTD getchar;
using _CSTD perror;
using _CSTD putc; using _CSTD putchar;
using _CSTD printf; using _CSTD puts; using _CSTD remove;
using _CSTD rename; using _CSTD rewind; using _CSTD scanf;
using _CSTD setbuf; using _CSTD setvbuf; using _CSTD sprintf;
using _CSTD sscanf; using _CSTD tmpfile; using _CSTD tmpnam;
using _CSTD ungetc; using _CSTD vfprintf; using _CSTD vprintf;
using _CSTD vsprintf;

using _CSTD snprintf; using _CSTD vsnprintf;
using _CSTD vfscanf; using _CSTD vscanf; using _CSTD vsscanf;

#pragma warning(pop)
_STD_END
 #endif /* RC_INVOKED */

#endif /* _CSTDIO_ */

/*
 * Copyright (c) by P.J. Plauger. All rights reserved.
 * Consult your license regarding permissions and restrictions.
V6.50:0009 */

위 코드가 msvc의 cstdio 파일인데, 중간에 보면 _STD_BEGIN, _STD_END가 있다

 

#define _STD_BEGIN	namespace std {
#define _STD_END	}

이런식으로 함수들이 std 네임스페이스에 들어가있다

반응형