내 연 함수 - C 중 키워드 inline 용법 분석

1. 내 연 함수 가 무엇 입 니까?
       C 언어 에서 만약 에 일부 함수 가 빈번하게 호출 되면 함수 창고, 즉 함수 창고 가 끊임없이 들 어가 면 창고 공간 이나 창고 메모리 의 대량 소 모 를 초래 할 수 있다.
       이 문 제 를 해결 하기 위해 인 라인 장식 부 를 특별히 도입 하여 내 연 함수 임 을 나타 낸다.
       스 택 공간 이란 프로그램 을 설치 하 는 부분 데이터, 즉 함수 내 데이터 의 메모리 공간 을 말 합 니 다. 시스템 에서 스 택 공간 은 유한 합 니 다. 만약 에 자주 사용 하면 스 택 공간 부족 으로 인 한 프로그램 오류 문 제 를 초래 할 수 있 습 니 다. 함수 의 순환 재 귀 호출 의 최종 결 과 는 스 택 메모리 공간 이 고갈 되 는 것 입 니 다.
다음은 예 를 들 어 보 겠 습 니 다.
#include   

//     inline :      
inline char* dbtest(int a) 
{  
	return (i % 2 > 0) ? " " : " ";  
}   
  
int main()  
{  
	int i = 0;  
	for (i=1; i < 100; i++) 
	{  
		printf("i:%d       :%s /n", i, dbtest(i));      
	}  
} 

     위의 예 는 바로 표준 내 연 함수 의 용법 입 니 다. inline 수식 을 사용 하면 좋 은 점 을 알 수 없습니다. 사실은 내부 에서 의 작업 은 모든 for 순환 의 내부 에서 dbtest (i) 를 호출 하 는 곳 에서 (i% 2 > 0) 로 바 꾸 는 것 입 니까?"기": "우" 는 이렇게 하면 빈번 한 호출 함수 가 스 택 메모리 에 대한 중복 개발 로 인 한 소 모 를 피 할 수 있 습 니 다.
     사실은 우리 가 앞에서 배 운 동적 라 이브 러 리 와 정적 라 이브 러 리 와 유사 한 문제 로 dbtest 함수 의 코드 를 main 함수 에 직접 넣 고 for 순환 을 실행 할 때 이 코드 를 계속 호출 합 니 다. 함수 스 택 을 계속 열 지 않 습 니 다.
2. 내 연 함수 의 프로 그래 밍 스타일
1. 키워드 inline 은 함수 정의 체 와 함께 놓 아야 함 수 를 내 연 으로 만 들 수 있 고 inline 을 함수 성명 앞 에 두 어야 아무런 역할 을 하지 않 습 니 다.
다음 스타일 의 함수 Foo 는 내 연 함수 가 될 수 없습니다:
inline void Foo(int x, int y); // inline           
void Foo(int x, int y)
{
}

다음 스타일 의 함수 Foo 는 내 연 함수 가 됩 니 다.
void Foo(int x, int y);
inline void Foo(int x, int y) // inline           
{
}
       그 러 니까 인 라인 은 일종 의
"실현 을 위 한 키워드".
성명 에 사용 되 는 키워드 가 아 닙 니 다.일반적으로 사용 자 는 함수 의 성명 을 읽 을 수 있 지만 함수 의 정 의 를 볼 수 없습니다.대부분의 교과서 에 내 연 된 함수 의 성명, 정의 체 앞 에 inline 키 워드 를 넣 었 음 에 도 불구 하고 inline 은 함수 의 성명 에 나타 나 서 는 안 된다 고 생각 합 니 다.이 디 테 일 은 함수 의 기능 에 영향 을 주지 않 지만 고 품질 C + + / C 프로 그래 밍 스타일 의 기본 원칙 을 나 타 냈 다. 성명 과 정 의 는 혼동 할 수 없고 사용 자 는 함수 가 내부 연결 이 필요 한 지 알 필요 가 없다.
2. inline 의 사용 은 제한 이 있다.
      inline 은 함수 체 내 코드 가 간단 한 함수 수 에 만 적합 하 며, 복잡 한 구조 제어 문 구 를 포함 할 수 없습니다. 예 를 들 어 while, switch, 그리고 내 연 함수 자 체 는 직접 재 귀 함수 (자신의 내부 에서 자신의 함수 도 호출) 가 될 수 없습니다.
3. 내 연 사용 을 삼가 라
       내 연 은 함수 의 집행 효율 을 높 일 수 있 는데, 왜 모든 함 수 를 내 연 함수 로 정의 하지 않 습 니까?만약 모든 함수 가 내 연 함수 라면, '내 연' 이라는 키 워드 를 필요 로 합 니까?
       내 연 은 코드 팽창 (복사) 을 대가 로 함수 호출 비용 만 줄 여 함수 의 집행 효율 을 높 인 다.함수 체 내 코드 를 실행 하 는 시간 이 함수 호출 비용 보다 많 으 면 효율 적 인 수확 이 적 을 것 이다.다른 한편, 모든 내 연 함수 의 호출 은 프로그램의 총 코드 량 을 증가 시 키 고 더 많은 메모리 공간 을 소모 할 것 이다.
아래 의 상황 은 내 연 을 사용 하 는 것 이 좋 지 않다.
(1) 함수 체 내의 코드 가 비교적 길 면 내 연 을 사용 하면 메모리 소모 대가 가 비교적 높다.
(2) 함수 체 내 에 순환 이 생기 면 함수 체 내 코드 를 실행 하 는 시간 이 함수 호출 비용 보다 크다.
좋 은 컴 파일 러 는 함수 의 정의 체 에 따라 가치 없 는 내 연 을 자동 으로 취소 합 니 다.
요약:
       따라서 내 연 함 수 를 헤더 파일 에 넣 어 실현 하 는 것 이 적당 합 니 다. 모든 파일 에 한 번 의 번 거 로 움 을 덜 어 주 는 것 이 좋 습 니 다. 따라서 성명 과 정 의 는 일치 해 야 합 니 다. 사실은 모든 파일 에서 이 내 연 함 수 를 한 번 씩 실현 한다 면 모든 정의 가 똑 같 음 을 보증 하 는 것 이 좋 습 니 다. 그렇지 않 으 면 정의 되 지 않 은 행 위 를 일 으 킬 것 입 니 다. 즉,모든 파일 의 정의 가 같 지 않 으 면 컴 파일 러 가 펼 치 는 것 이 어느 것 인지 구체 적 인 컴 파일 러 에 따라 정 해 야 합 니 다. 따라서 내 연 함 수 를 헤더 파일 에 정의 하 는 것 이 좋 습 니 다. 

좋은 웹페이지 즐겨찾기