2014-04-08 4 views
2

호기심에서 벗어나서 C에서 main() 안에 함수를 정의하는 것이 바람직하지 않습니까?main() 내부에서 함수 정의하기

내가 쓰는 현재 프로그램에서 내 문제는 main() (포인터가 아니라 구조체 자체가 다른 파일에 있음) 내에 정의 된 구조체에 대한 20 개의 포인터가 있고 블록이 있습니다. 다른 매개 변수로 여러 번 호출해야하는 코드이며 포인터를 수정하는 기능이 있어야합니다. 내가 발견 한 유일한 해결책 (나는 초보자이다.)은 포인터를 수정하는 정확한 범위를 가진 main() 안에 함수를 정의하는 것이었다.

+0

가난한 방법은 아니지만 단순히 그렇게 할 수는 없습니다. – Maroun

+0

GCC는 hissy fit을 가지고 있지 않았고 계획대로 작동했습니다 ... 행운이 있기 때문에 나는 코드를 작성한 컴퓨터와 다른 컴퓨터를 사용하고 있으며 가지고있는 것을 공유 할 수는 없습니다 ... –

+0

' '경고 : ISO C는 중첩 된 함수를 금지한다' –

답변

5

중첩 함수 (함수 내의 함수)는 GNU 전용 확장이며 일반 C 표준의 일부가 아닙니다. 다른 컴파일러는이를 컴파일하지 못합니다. 이 때문에 중첩 된 함수를 사용하지 않는 것이 좋습니다.

외부에서 구조체 및 함수를 선언하십시오. 그러면 데이터 구조에 대한 포인터를 함수에 항상 전달할 수 있습니다.

struct s {...}; 

void foo(struct s *, ...); 

int main() { 

    struct s mystruct; 
    foo(&mystruct, ...); 

} 
6

GCC는 할 수 있지만 그 컴파일러 특정 비표준 확장입니다 - 그래서 당신의 코드가 다른 컴파일러에 컴파일되지 않습니다

0
당신이 다른 방법 안에 방법을 (정의 할 수 있습니다

GCC 컴파일러 이것은 실제로 Gnu 확장입니다.) 그러나 대개는 나쁜 습관입니다.

경우에 따라 방법이이 특정 유형에 대해 알 수있는 유일한 방법입니다. 그러나 당신의 타입을 외부로 만들고이 타입을 사용하는 메소드를 일반적인 방법 (다른 메소드의 바깥에 있음)으로 선언하는 것이 좋습니다.

관련 문제