2016-08-24 2 views
0

항상 main()보다 먼저 함수를 선언합니다. 나를 혼란스럽게하는 것은 함수 인자를 선언하고 정의하고 할당하고 전달하는 올바른 (또는 적어도 모범 사례) 방법입니다.올바른 C 함수 인수 변수 정의 위치

// EXAMPLE 1 // 
int idum1 = 1; 

void my_func(int); // Says the function's going to need an integer. 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(idum2) // Is this then declaring AND defining a local integer, idum2? 
{ 
    // Do stuff using idum2... 
} 

를하지만이 역시 작동합니다 : 예를 들어,이 작품

// EXAMPLE 2 // 
int idum1 = 1; 

void my_func(int idum2); //Is this declaring a variable idum2 local to my_func? 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(idum3) // A different variable or the same one (idum2) still works. 
        //Is this declaring idum3 as a local integer? 
{     //What happened to idum2, still a viable integer in the function? 
    // Do stuff using idum3... 
} 

을 그리고이 작품 :

// EXAMPLE 3 // 
int idum1 = 1; 

void my_func(int idum2); // Declaring... 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(int idum2) //Declaring again. Different address as in function declaration? 
         //Same variable and address? 
{ 
    // Do stuff using idum2... 
} 

을 그래서이 수행합니다

// EXAMPLE 4 // 
int idum1 = 1; 

void my_func(int); 

void main (void) 
{ 
    my_func(idum1); 
} 

void my_func(int idum2) //Yet another way that works. 
{ 
    // Do stuff using idum2... 
} 

나 ' 독학하는 초보자이지만, 나는 너희를 위해 끽끽 거리고 있었다. 실제로 올바른 방법을 알지 못하고 장면 뒤에서 무슨 일이 일어나고 있는지 알 수 없습니다. 나는 그것이 작동한다는 것을 항상 알고 있습니다 (항상 위험합니다).

내 직감은 예제 4가 최선의 방법이라고 말합니다. 어떤 타입을 필요로하는지 알려주고, 코딩과 에러 검사의 편의를 위해 타입과 함께 함수에서 선언하십시오. 나는 당신이 무엇을하려고하는지에 따라 어떤 방식 으로든 그렇게 할 이유가있을 것이라고 확신하지만 여기에는 어떤 지침을 실제로 사용할 수 있습니다.

예제 3을 많이 보았지만, 변수를 두 번 선언하면 불필요 해 보입니다.

누군가 내가 설명하려고하는 것에 대해 설명하고 설명 해주는 기사에 나를 설명하거나 가리킬 수 있습니까? 거의 내가 뭘 요구하는지 잘 모르겠다. 모든 것이 웹상에서 조각났습니다. CodingUnit을 사용해 보았지만 자습서만으로는 충분하지 않습니다. 티아!

+2

'void main (void)'는 호스트 된 환경에서 유효하지 않은 서명입니다. 'main'은'int' 결과를 리턴합니다. – Olaf

+0

"주로 의견을 기반으로", "너무 광범위하게"또는 "외부 리소스를 묻는"경우 정말 어려움을 겪었습니다.어쨌든, 그것은 주제에서 벗어난 것입니다. – Olaf

+1

당신은 적절한 지식이 필요해 보인다. 나의 제안은 C 책 목록을 찾는 것이다. –

답변

0

전달 선언에서 매개 변수의 이름을 제공 할 필요는 없지만 이름을 제공 할 수있는 경우에만 유형이 필요합니다. 그러나 함수를 정의 할 때와 같을 필요는 없습니다. 이 함수 파라미터 타입 int이며 변수 이름이다 i에 funciton 정의

void my_func(int i){..} 말한다. 함수 블록 안에 변수 이름 i에 의해 값에 액세스 할 수 있습니다.

또한 함수 블록으로 범위가 제한되어 있으므로 변수를 다시 선언 할 필요가 없습니다.

기본적으로 이러한 방법에는 차이점이 없습니다.

0

이 너무 작동합니다 : 함수 서명에

void my_func(int); 

그것은 이름 인수에 대해하지만 유형에 대해 아니에요.

특별한 증가는 다음 매개 변수

int idum1 = 1; 

void my_func(int idum1) 
{ 
    idum1++; 
} 

대부분의 지역 범위를 가진 변수와 동일한 이름을 가진 외부 변수를 선언 할 때 규칙이 아닌 외부 있습니다.