2009-06-15 4 views
0

하나의 함수에서만 접근 할 수 있도록 함수를 선언하고 정의하는 방법은 무엇입니까? 다른 함수에서 함수를 선언 할 수 있습니다. 그러나 로컬 함수 정의가 (Visual C++에 따르면) 불법이므로 전역 함수에서 함수를 정의해야합니다. 다른 함수에서 호출 할 수 있습니다.하나의 다른 함수에서만 함수에 접근 가능하게하기

void f1() { 
    void f1_private(); 
    f1priv(); 
} 

void f1_private() { 
} 

void f2() { 
    f1_private(); // Legal 
} 

f1_private는 f1에서만 액세스 할 수 있습니까? 그렇지 않다면, 지역적으로 선언 된 함수의 용도는 무엇입니까?

답변

8

두 개의 기능을 하나의 별도 파일에 넣고 덜 보이게 만들 수 있습니다. static. C의 정적 함수는 선언 된 동일한 소스 파일 (가난한 사람의 네임 스페이스 개념의 일종)에서만 액세스 할 수 있습니다.

그러면 평상시처럼 헤더 파일에 보이는 함수가 표시됩니다.

+0

이것은 아마도 당신이 가깝지만 아마도 그 파일에 더 많은 기능을 추가하는 것을 멈추지 않습니다. 그것을 컴파일하고 사람들이 정적으로 라이브러리로 링크하도록 강요하지 않는다면 말입니다. – patros

+1

그것은 C입니다. 당신이 좋아하는 것을 집행 할 수있는 노예와 훈육 언어에서 얻을 수있는만큼 멀리 떨어져 있습니다. – Joey

3

번호

하지만이 방법은 비공개로, 클래스 내에서 메소드를 선언하고 첫 번째 클래스의 다른 클래스 친구를 만들어, C++에서 쓸 수 있습니다.

8

당신이 할 수있는 최선의 방법은 자신의 파일에 두 함수를 넣고 선언문 앞에 'static'이라는 접두어를 붙여서 정적 링크가되도록 선언하는 것입니다. 정적 링크가있는 함수는 컴파일 단위 (일반적으로 대부분의 빌드 시스템에서 같은 파일을 의미)에서만 액세스 할 수 있습니다.

비공개 함수를 다른 곳에서 호출해야하는 경우 호출 된 각 파일에 프로토 타입을 작성하거나 각 파일에 포함 된 프로토 타입을 포함하는 헤더 파일을 만들어야합니다 에서 전화했다.

0

// 당신이 .c 파일의 맨 아래에

static void foo() 
{ 
} 

void dude() 
{ 
    // foo only accessible here, unless you have forward 
    // declared it higher up in the file 
    foo(); 
} 

그러나, 정적 메서드는 함수 포인터를 통해 파일 범위 외부에서 호출 할 수 있습니다.

0

댓글을 달았습니다.

//For use only by foo. 

누군가가 실제로 그것을 사용하는 것에 대해 호언 장담하는 경우, 최선의 노력에도 불구하고 방법을 찾을 수 있습니다. 코드를 복사하여 붙여 넣거나 코드를 리팩터링하는 것만을 의미합니다. 그들이 할 수 없다는 것을 알리는 것이 가장 좋습니다.

클래스에있는 경우 비공개로 캡슐화 할 수도 있습니다. 그렇지 않은 경우 정적입니다.

+0

C에서 개인 함수 또는 클래스와 같은 것은 존재하지 않습니다. –

+0

그는 Visual C++ 컴파일러를 사용하고 있습니다. – patros

0

하나의 함수에 대한 공용 멤버와 다른 클래스에서 액세스 할 수있는 전용 멤버 함수로 별도의 클래스를 선언 할 수 있습니다. 이 클래스 내에서만 사용되는 경우 내부 클래스로 만들 수 있습니다.

관련 문제