추천, 2024

에디터의 선택

C ++에서 인라인과 매크로의 차이점

매크로는 호출 할 때 확장되는 명령입니다. 함수는 매크로처럼 정의 될 수 있습니다. 마찬가지로 인라인 함수도 호출 시점에 확장됩니다. 인라인 함수와 매크로 함수의 주된 차이점은 컴파일 하는 동안 인라인 함수 가 확장되고 프로그램이 전처리 기에 의해 처리 될 때 매크로 가 확장된다는 것입니다.

비교 차트를 사용하여 인라인과 매크로의 차이점을 알아 보겠습니다.

비교 차트

비교의 근거인라인매크로
기본인라인 함수는 컴파일러에서 파싱됩니다.매크로는 전처리기에 의해 확장됩니다.
통사론인라인 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 ()를 선언했습니다.이 함수는 두 매개 변수의 수를 비교하여 더 많이 찾습니다. 매크로가 새 행으로 만 종료되므로 매크로를 종료하는 세미콜론이 없음을 알 수 있습니다. 매크로는 텍스트 대체물이므로 호출 된 매크로의 코드가 확장됩니다.

  • 매크로는 항상 프로그래머가 프로그램을 읽는 동안 프로그램의 모든 매크로를 쉽게 식별 할 수 있도록 대문자로 정의됩니다.
  • 매크로는 클래스의 멤버 함수가 될 수 없으며 모든 클래스의 데이터 멤버에 액세스 할 수도 없습니다.
  • 매크로 함수는 정의에 나타날 때마다 인수를 평가하여 예상치 못한 결과가 발생합니다.
  • 큰 매크로는 코드의 크기를 불필요하게 증가시키기 때문에 매크로는 더 작은 크기 여야합니다.

인라인과 매크로의 주요 차이점

  1. 인라인과 매크로의 기본적인 차이점은 컴파일러에서 인라인 함수를 구문 분석하는 반면 프로그램의 매크로는 선처리 프로세서로 확장한다는 것입니다.
  2. 인라인 함수를 정의하는 데 사용되는 키워드는 " 인라인 "이지만 매크로 정의에 사용되는 키워드는 " #define "입니다.
  3. 일단 인라인 함수가 클래스 내에서 decalre되면 클래스 내부 또는 클래스 외부에서 정의 할 수 있습니다. 반면에 매크로는 항상 프로그램 시작시 정의됩니다.
  4. 인라인 함수에 전달 된 인수는 컴파일하는 동안 한 번만 평가되며 매크로 인수는 코드에서 매크로가 사용될 때마다 평가됩니다.
  5. 컴파일러는 클래스 내부에 정의 된 모든 함수를 인라인하거나 확장하지 않을 수 있습니다. 반면에 매크로는 항상 확장됩니다.
  6. 인라인 키워드가없는 클래스 내부에 정의 된 short 함수는 자동으로 인라인 함수로 만들어집니다. 반면에 매크로는 구체적으로 정의되어야합니다.
  7. 인라인 함수는 클래스 멤버에 액세스 할 수 있지만 매크로는 클래스 멤버에 절대 액세스 할 수 없습니다.
  8. 인라인 함수를 종료하려면 닫힌 중괄호가 필요하지만 매크로는 새 행의 시작으로 종료됩니다.
  9. 디버깅은 컴파일 중 오류가 있는지 검사되므로 inlne 기능으로 쉽게 사용할 수 있습니다. 반면에 컴파일하는 동안 매크로가 검사되지 않으므로 매크로 디버깅이 어려워집니다.
  10. 함수 인 인라인 함수는 시작 및 중괄호 안에 멤버를 바인딩합니다. 반면 매크로에는 종료 기호가 없으므로 매크로에 더 많은 문장이 포함되어 있으면 바인딩이 어려워집니다.

결론 :

인라인 함수는 매크로 함수보다 훨씬 설득력이 있습니다. C ++은 "const"키워드를 사용하는 상수를 정의하는 더 좋은 방법을 제공합니다.

Top