2013-08-13 8 views
4

이 두 선언 유형의 유형이 호환 가능합니까?호환 유형 및 인수 유형 규정 자

void f(char *, char *); 
void f(char *restrict, char *restrict); 

또는 유사 :

void g(char *); 
void g(char *const); 

내가 문제를 다루고 표준에서 아무것도를 찾는 힘든 시간을 보내고 있습니다. 나는 주로 수동으로 함수를 프로토 타이핑하는 것이 유효한 지 여부에 대한 주제에 관심이 있습니다. restrict 키워드는 생략합니다. 여기서 실제 유형에는 사용중인 다른 라이브러리 버전이나 C의 버전에 따라 제한적인 인수가있을 수 있습니다.

+1

예, 이것들은 호환 가능합니다. * 표준 따옴표를 파헤 치기 * – Christoph

답변

3

C11 섹션 6.7.6.3 §15한다. :

유형 호환성 및 복합 유형 결정에서 함수 또는 배열 유형으로 선언 된 각 매개 변수는 조정 된 유형으로 간주되고 규정 된 유형으로 선언 된 각 매개 변수는 선언되지 않은 버전으로 간주됩니다.을 입력하십시오.

+0

나는 어느 대답을 받아 들일지를 결정하는 데 어려움을 겪었습니다.하지만 나는 Ouah의 답을하기 직전에 "38 분 전"이 "39 분 전"으로 변경된 것을 보았습니다. 그래서이 사람이 당신 것입니다. :-) –

+1

@R .. 답변에 타임 스탬프를 올리면 답변이 게시 된 정확한 시간을 볼 수 있습니다. 실제로 ouah는 Christoph가하기 전에 그의 대답을 18 초 게시했습니다. 선택은 물론 당신의 것입니다 ;-) –

+0

@ 킹즈 인디언 : 나의 변론에서 내 의견은 그의 답변보다 앞선 것입니다. – Christoph

1

프로토 타입의 인수 이름은 중요하지 않으므로 이러한 정의는 동일합니다. 그러나 이름을 올리는 것은 좋은 습관입니다. 이는 인수가 의도 한 바가 무엇인지 생각해야하기 때문입니다. 기술적으로 그들은 필요하지는 않지만 문서로 제공됩니다.

const 한정자와 다른 점은 함수의 의미가 변경되기 때문입니다.

+0

이들은 내 인수 목록에 인수 이름이없고 유형 한정자입니다. –

+0

그리고'const'가 함수의 "서명"을 변경한다는 것은 확실하지 않습니다. 'const'는 pointed-to 타입에는 적용되지 않습니다. 이것은 함수 내부의 인수 값을받는 자동 저장 오브젝트에 적용됩니다. 이는 인터페이스 계약의 일부가 아닌 함수의 구현 세부 사항입니다. –

+0

@R .. 당신 말이 맞아요, 서명이 틀린 단어입니다, 나는 그것을 틀린 것처럼 보이는 의미로 바꿨지 만, 나는 그것을 영어로 어떻게 더 잘 넣을 지 모른다. – Devolus

4

그들은 호환 :

(C99, (P15)의 프로토 타입을 포함 6.7.5.3 함수 선언자) "[...] ( 타입 호환성의 정량법과 복합 형의 각 파라미터 함수 또는 유형 조정 형을 갖는로한다 어레이 자격 형 선언 각 변수 선언 선언 된 타입의 규정되지 않은 버전을 갖는 것으로 취해진 다) "

+0

누가 먼저 게시했는지에 대한 잘못된 결정에 사과드립니다. ;-) 적어도 @Christoph는 먼저 코멘트를했습니다. –

+0

@R .. 아무 문제 없어, 우린 정말 가까이에 있었어. – ouah