
비교 차트를 사용하여 인라인과 매크로의 차이점을 알아 보겠습니다.
비교 차트
비교의 근거 | 인라인 | 매크로 |
---|---|---|
기본 | 인라인 함수는 컴파일러에서 파싱됩니다. | 매크로는 전처리기에 의해 확장됩니다. |
통사론 | 인라인 return_type funct_name (매개 변수) {. . . } | #define macro_name char_sequence |
사용 된 키워드 | 인라인 | #밝히다 |
한정된 | 클래스 내부 또는 외부에서 정의 할 수 있습니다. | 항상 프로그램 시작시 정의됩니다. |
평가 | 인수를 한 번만 평가합니다. | 그것은 코드에서 사용될 때마다 인수를 평가합니다. |
확장 | 컴파일러는 모든 함수를 인라인하지 않고 확장 할 수 없습니다. | 매크로는 항상 확장됩니다. |
오토메이션 | 클래스 내부에 정의 된 짧은 함수는 자동으로 인라인 함수에 적용됩니다. | 매크로는 구체적으로 정의되어야합니다. |
액세스 중 | 인라인 멤버 함수는 클래스의 데이터 멤버에 액세스 할 수 있습니다. | 매크로는 클래스의 멤버가 될 수 없으며 클래스의 데이터 멤버에 액세스 할 수 없습니다. |
종료 | 인라인 함수의 정의는 인라인 함수의 끝에있는 중괄호로 끝납니다. | 매크로 정의는 새 행으로 종료됩니다. |
디버깅 | 컴파일하는 동안 오류 검사가 수행되므로 인라인 함수에서 디버깅이 쉽습니다. | 컴파일 중 오류 검사가 발생하지 않으므로 매크로 디버깅이 어려워집니다. |
제본 | 인라인 함수는 함수 본문이 중괄호로 시작하고 끝나는대로 함수 본문에있는 모든 문을 매우 잘 묶습니다. | 종료 기호가 없으므로 둘 이상의 명령문이있는 매크로는 바인딩 문제에 직면합니다. |
인라인 정의
인라인 함수는 일반 함수처럼 보이지만 키워드 " inline "이 앞에옵니다. 인라인 함수는 호출되는 대신 호출 시점에 확장되는 짧은 길이의 함수입니다. 예제를 통해 인라인 함수를 이해해 봅시다.
#include using namespace std; 클래스 예제 {int a, b; public : 인라인 void initialize (int x, int y) {a = x; b = y} void display () {cout << a << ""<위 프로그램에서 "example"클래스의 인라인 함수로 initialization () 함수를 선언하고 정의했습니다. initialization () 함수의 코드는 "example"클래스의 객체에 의해 호출되는 위치에서 확장됩니다. 클래스 예제에 정의 된 function display ()는 인라인으로 선언되지 않지만 컴파일러에서 다음과 같이 인라인으로 간주 될 수 있습니다. C ++에서 클래스 내부에 정의 된 함수는 함수의 길이를 고려하여 컴파일러에 의해 자동으로 인라인됩니다.
- 인라인 함수는 함수 호출 및 반환의 오버 헤드를 줄여 프로그램 실행 시간을 줄입니다. 또한 인수가 스택에 푸시되고 함수가 호출 될 때 레지스터가 저장되고 함수가 반환 될 때 재설정됩니다. 시간이 걸리므로 매번 로컬 변수와 형식 매개 변수를 만들 필요가 없으므로 인라인 함수가이를 피합니다 .
- 인라인 함수는 클래스의 멤버가 될 수 있으며 클래스의 데이터 멤버에 액세스 할 수도 있습니다.
- 인라인 함수는 프로그램 실행 시간을 줄이지 만 인라인 함수의 길이가 더 길면 중복 된 코드로 인해 프로그램의 크기도 커집니다. 따라서 아주 작은 함수를 인라인하는 것이 좋습니다.
- 인라인 함수의 인수는 한 번만 평가됩니다.
매크로의 정의
매크로는 "전처리 지시어"입니다. 컴파일하기 전에 프로그램은 전처리기에 의해 검사되고, 프로그램에서 매크로를 찾은 곳에서는 매크로를 정의에 따라 바꿉니다. 따라서 매크로는 "텍스트 대체"로 간주됩니다. 매크로를 예제로 살펴 보겠습니다.
#include #define 큰 (a, b) ((a <b)? b : a) int main (void) {cout << "10과 20 중 큰 숫자는"<<보다 큼 ( "20", "10") << "\ n"; 0을 반환; }
위의 코드에서 매크로 함수 GREATER ()를 선언했습니다.이 함수는 두 매개 변수의 수를 비교하여 더 많이 찾습니다. 매크로가 새 행으로 만 종료되므로 매크로를 종료하는 세미콜론이 없음을 알 수 있습니다. 매크로는 텍스트 대체물이므로 호출 된 매크로의 코드가 확장됩니다.
- 매크로는 항상 프로그래머가 프로그램을 읽는 동안 프로그램의 모든 매크로를 쉽게 식별 할 수 있도록 대문자로 정의됩니다.
- 매크로는 클래스의 멤버 함수가 될 수 없으며 모든 클래스의 데이터 멤버에 액세스 할 수도 없습니다.
- 매크로 함수는 정의에 나타날 때마다 인수를 평가하여 예상치 못한 결과가 발생합니다.
- 큰 매크로는 코드의 크기를 불필요하게 증가시키기 때문에 매크로는 더 작은 크기 여야합니다.
인라인과 매크로의 주요 차이점
- 인라인과 매크로의 기본적인 차이점은 컴파일러에서 인라인 함수를 구문 분석하는 반면 프로그램의 매크로는 선처리 프로세서로 확장한다는 것입니다.
- 인라인 함수를 정의하는 데 사용되는 키워드는 " 인라인 "이지만 매크로 정의에 사용되는 키워드는 " #define "입니다.
- 일단 인라인 함수가 클래스 내에서 decalre되면 클래스 내부 또는 클래스 외부에서 정의 할 수 있습니다. 반면에 매크로는 항상 프로그램 시작시 정의됩니다.
- 인라인 함수에 전달 된 인수는 컴파일하는 동안 한 번만 평가되며 매크로 인수는 코드에서 매크로가 사용될 때마다 평가됩니다.
- 컴파일러는 클래스 내부에 정의 된 모든 함수를 인라인하거나 확장하지 않을 수 있습니다. 반면에 매크로는 항상 확장됩니다.
- 인라인 키워드가없는 클래스 내부에 정의 된 short 함수는 자동으로 인라인 함수로 만들어집니다. 반면에 매크로는 구체적으로 정의되어야합니다.
- 인라인 함수는 클래스 멤버에 액세스 할 수 있지만 매크로는 클래스 멤버에 절대 액세스 할 수 없습니다.
- 인라인 함수를 종료하려면 닫힌 중괄호가 필요하지만 매크로는 새 행의 시작으로 종료됩니다.
- 디버깅은 컴파일 중 오류가 있는지 검사되므로 inlne 기능으로 쉽게 사용할 수 있습니다. 반면에 컴파일하는 동안 매크로가 검사되지 않으므로 매크로 디버깅이 어려워집니다.
- 함수 인 인라인 함수는 시작 및 중괄호 안에 멤버를 바인딩합니다. 반면 매크로에는 종료 기호가 없으므로 매크로에 더 많은 문장이 포함되어 있으면 바인딩이 어려워집니다.
결론 :
인라인 함수는 매크로 함수보다 훨씬 설득력이 있습니다. C ++은 "const"키워드를 사용하는 상수를 정의하는 더 좋은 방법을 제공합니다.