stdio.h 헤더를 사용하지 않고 문자를 출력할 수 있습니다.
printf와 같이 SetConsoleTextAttribute 함수를 사용하면 글자 색을 바꿀 수 있습니다.
WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), &s, strlen(s), &charsWritten, NULL);
https://docs.microsoft.com/ko-kr/windows/console/writeconsole
자세한 설명은 여기서 확인할 수 있습니다.
콘솔 화면 버퍼에 대한 핸들
GetStdHandle(STD_OUTPUT_HANDLE)
출력한 문자에 대한 포인터
char 배열의 주소를 주면 됩니다.
쓸 문자 수
문자 크기보다 적으면 이 값만큼만 출력합니다.
넉넉하게 줘도 오류 없이 실행됩니다.
실제로 쓰인 문자 수를 확인할 변수에 대한 포인터
DWORD 변수의 주소를 주면 됩니다.
lpReserved
NULL로 예약되어 있습니다.
비슷합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <Windows.h>
void main()
{
clock_t start;
DWORD charsWritten;
start = clock();
for (int i = 0; i <= 1000000; i++){
WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), "ABCDEFG\n", 8, &charsWritten, NULL);
}
printf("WriteConsoleA 백만 번 걸린 시간 : %.3fs\n", (double)(clock() - start) / CLOCKS_PER_SEC);
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <Windows.h>
void main()
{
clock_t start;
DWORD charsWritten;
start = clock();
for (int i = 0; i <= 1000000; i++){
printf("ABCDEFG\n");
}
printf("pirntf 백만 번 걸린 시간 : %.3fs\n", (double)(clock() - start) / CLOCKS_PER_SEC);
}
보다시피 속도는 큰 차이가 없습니다.
저수준 함수라고 해도 반드시 빠른 것은 아닙니다.