C++ 헤더 파일
6211 단어 cpp
main
에서 함수를 호출하려면 함수가 나타나는 순서대로 컴파일되기 때문에 컴파일러가 알 수 있도록 함수가 소스 코드에서 main
앞에 있어야 합니다.#include <iostream>
#include <ctime>
int getRandomTotal()
{
return rand() % 10 + 1;
}
void printHelloWorld()
{
int total = getRandomTotal();
std::cout << "Print " << total << " times:\n\n";
for (int i = 0; i < total; i++)
{
std::cout << "Hello World!\n";
}
}
int main()
{
srand(time(NULL));
printHelloWorld();
return 0;
}
여기서
printHelloWorld
는 main
에서 호출되므로 그 앞에 있어야 합니다. getRandomTotal
는 printHelloWorld
에서 호출되므로 해당 함수 앞에 있어야 합니다.이것은 정확히 편리하지 않으며 꽤 빨리 지저분해질 수 있습니다. 다행히도 함수 프로토타입을 대신 사용할 수 있으며 함수는 함수 호출 아래 또는 완전히 다른 파일에 존재할 수 있습니다.
함수 프로토타입은 함수의 머리글이며 반환 유형, 함수 이름 및 매개변수로 구성되며 그 뒤에 세미콜론이 붙습니다.
functionType functionName(parameter list);
함수 프로토타입에서 매개변수 목록에 대한 변수 이름을 지정할 필요는 없지만 데이터 유형을 지정해야 합니다.
예를 들어:
#include <iostream>
int addNumbers(int, int); // function prototype
int main()
{
std::cout << addNumbers(2, 3) << std::endl;
return 0;
}
int addNumbers(int x, int y)
{
return x + y;
}
다음은 함수 프로토타입으로 다시 작성된 동일한 프로그램입니다.
// Function prototypes
void printHelloWorld();
int getRandomTotal();
int main()
{
srand(time(NULL));
printHelloWorld();
return 0;
}
void printHelloWorld()
{
int total = getRandomTotal();
std::cout << "Print " << total << " times:\n\n";
for (int i = 0; i < total; i++)
{
std::cout << "Hello World!\n";
}
}
int getRandomTotal()
{
return rand() % 10 + 1;
}
이제 함수 프로토타입이 맨 위에 있고 함수 정의가 아래에 있습니다
main
.함수의 순서는 더 이상 중요하지 않음을 알 수 있습니다. 나는 여전히 작동한다는 것을 보여주기 위해
getRandomTotal
아래에 printHelloWorld
함수를 재정렬했습니다. 컴파일러는 printHelloWorld
가 main
에서 호출되기 전에 두 함수에 대해 알고 있기 때문입니다.그러나 각 파일이 독립적으로 컴파일되기 때문에 함수 정의를 다른 파일로 분할하면 정의의 순서가 다시 중요합니다.
// file main.cpp
#include <iostream>
#include <ctime>
// Function prototypes
void printHelloWorld();
int getRandomTotal();
int main()
{
srand(time(NULL));
printHelloWorld();
return 0;
}
// file funcs.cpp
#include <iostream>
#include <ctime>
void printHelloWorld()
{
int total = getRandomTotal();
std::cout << "Print " << total << " times:\n\n";
for (int i = 0; i < total; i++)
{
std::cout << "Hello World!\n";
}
}
int getRandomTotal()
{
return rand() % 10 + 1;
}
이로 인해 오류가 발생합니다
'getRandomTotal': identifier not found
.funcs.cpp
에서 getRandomTotal
앞에 printHelloWorld
를 넣으면 다시 작동합니다.헤더 파일
C++에서 헤더 파일은 함수 선언을 포함하는 데 사용됩니다. 여러 파일에서
printHelloWorld
및 getRandomTotal
를 사용하려면 iostream
와 같은 파일을 포함해야 하는 것과 같은 방식으로 함수 프로토타입을 매번 포함해야 합니다. 대신 헤더 파일에 선언을 배치하고 포함할 수 있습니다. 이것이 #include <iostream>
를 사용할 때 수행하는 작업입니다.헤더 파일은
.h
또는 .hpp
로 끝납니다. Visual Studio를 사용하면 확장자가 .h
인 헤더 파일이 생성되고, Xcode를 사용하면 .hpp
확장자가 생성됩니다. .h
는 C이지만 C++ 프로그램에서 자주 사용되며 .hpp
는 C++이지만 C 프로그램에서는 사용할 수 없습니다. C++ 프로그램에서 무엇을 사용하든 일관성이 있습니다.// file main.cpp
#include <iostream>
#include <ctime>
#include "Funcs.h" // <- our header file
int main()
{
srand(time(NULL));
printHelloWorld();
std::cout << addNumbers(2, 3) << std::endl;
return 0;
}
// file Funcs.h
// Function declarations
#pragma once
int getRandomTotal();
void printHelloWorld();
// file Funcs.cpp
// Function definitions
#include <iostream>
#include <ctime>
int getRandomTotal()
{
return rand() % 10 + 1;
}
void printHelloWorld()
{
int total = getRandomTotal();
std::cout << "Print " << total << " times:\n\n";
for (int i = 0; i < total; i++)
{
std::cout << "Hello World!\n";
}
}
대괄호 대 따옴표
컴파일러는 여러 위치에서 헤더 파일을 찾습니다. 헤더 파일을 따옴표로 묶으면 컴파일러는 다른 디렉토리를 찾기 전에 먼저 소스 파일과 동일한 디렉토리를 찾습니다. 대괄호를 사용하는 경우 컴파일러는 소스 파일과 동일한 디렉토리를 찾지 않습니다.
따옴표는 모든 것에 사용할 수 있으며 컴파일러는 그것을 찾을 것입니다. 따옴표로 묶인 파일은 현재 파일을 기준으로 합니다.
Headers
라는 폴더를 만들고 그 안에 Funcs.h
를 이동하면 다음과 같이 작성할 수 있습니다.#include "./Headers/Funcs.h"
그러나
#include "Funcs.h"
도 여전히 작동합니다.가드 포함
파일이 여러 번 삽입되어 오류가 발생하는 것을 방지하기 위해 include 가드가 사용됩니다.
위에서 사용한 것처럼
#pragma once
를 볼 수 있습니다.다른 하나는 다음과 같습니다.
// file Funcs2.h
#ifndef Funcs2_h
#define Funcs2_h
int multiplyNums(int, int);
#endif
// file Funcs2.cpp
#include "Funcs2.h"
int multiplyNums(int x, int y)
{
return x * y;
}
// file main.cpp
#include "Funcs2.h"
int main()
{
std::cout << multiplyNums(12, 3) << std::endl;
return 0;
}
다시 말하지만, 당신이 사용하는 것에 일관성이 있습니다.
헤더 파일에 넣으면 안되는 것
헤더 파일에 다음을 포함하는 것은 허용되지 않거나 나쁜 습관으로 간주됩니다.
추가 읽을거리/참고문헌
Reference
이 문제에 관하여(C++ 헤더 파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/robotspacefish/c-header-files-1d1l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)