함수 wait()가 다른 함수에서 선언되었습니다. 그것은 합법적입니까?이 코드 세그먼트는 C에서 유효합니까?
void panic(const int reason, const char *strg)
{
int ErrNo;
struct machine_attributes mach;
int ret, docstat, cnt;
pid_t pid, wait(int *), setsid(void);
......
}
고마워요!
함수 wait()가 다른 함수에서 선언되었습니다. 그것은 합법적입니까?이 코드 세그먼트는 C에서 유효합니까?
void panic(const int reason, const char *strg)
{
int ErrNo;
struct machine_attributes mach;
int ret, docstat, cnt;
pid_t pid, wait(int *), setsid(void);
......
}
고마워요!
예,이 선언이 함수의 실제 정의와 일치하는 한. wait
라는 pid_t
pid
라는 이름의 함수 (int*
을 복용하고 pid_t
를 반환)하고 setsid
이라는 함수 (매개 변수를 고려하지 않고 pid_t
를 반환) :
pid_t pid, wait(int *), setsid(void);
이 세 가지 엔티티를 선언합니다.
pid
의 선언도 정의입니다.
누가 이것을 왜곡했는지 설명해주십시오. – templatetypedef
이 정답을 잘못 잘못 계산 한 사람이 그림자에서 나오고, 자신을 설명하고, 자신의 다운 그레이드를 제거하면 감사 할 것입니다. –
내가 볼 수있는 주요 문제는 투표자가 투표를하는 동안 이유를 설명하는 데 관심이없는 대부분의 유권자들입니다. 그들은 각자가 실수를 이해하고 배우는 데 도움이되는 이유를 설명해야합니다. 아마 이번 호에 위키 포스트를 올릴 때입니다 !! – Mahesh
그렇습니다. 예를 들어 보통의 C (비 POSIX 지향) 소스 파일에 wait
과 static
연결을 사용하는 경우 유용 할 수 있습니다. 갑자기 해당 파일의 함수에서 POSIX wait
을 호출해야한다는 것을 알게되었습니다. 호출하는 함수에서 선언 범위를 지정하면 파일 범위 static
의 정의 인 wait
과 충돌하지 않습니다.
wait
(또는 다른 기능)을 선언하지 않은 다른 헤더에서 pid_t
을 얻을 수 있지만 다른 유형의 누락으로 인해 이런 트릭을 사용할 수없는 경우가 있습니다.
네, 일부는 이것을 언어의 끔찍한 해킹/악용이라고 부릅니다. :-)
일부 컴파일러 확장이 허용하는 C의 함수는 다른 함수의 내부에서 정의 될 수 없습니다. – templatetypedef
@templatetypedef : 아니요, 다른 함수 안에서 선언 할 수 있습니다. –
@Charles Bailey- Ah, 잊어 버렸습니다. 그 forward-declaration은 단지 선언이 나타나는 함수에만 적용되는 것이 아닌가? 국부적 인 구조체 같이? 이것은 또 하나의 C (++) 엣지 경우입니다. – templatetypedef