2010-08-15 4 views
43

void은 C 프로그래밍 언어의 데이터 유형입니까? 그렇다면 어떤 유형의 값을 저장할 수 있습니까? 값을 저장하기 위해 int, float, char 등이있는 경우 void이 필요한 이유는 무엇입니까?C에서 데이터 형식이 무효입니까?

+0

어떤 언어로 이야기하고 있습니까? 기음? C++? 기음#? 자바? 다른 것? – Oded

답변

69

보이드는 조직적 목적으로 데이터 유형으로 간주되지만 기본적으로 "데이터 없음"을 나타 내기 위해 데이터 유형을 입력 할 자리 표시 자로 사용하는 키워드입니다. 포인터로 사용하는 경우에는

void bad_variable; 

:이 같은 변수를 선언 할 수 없습니다,

void MyRoutine(); 

그러나 :

따라서, 당신은 값을 반환하지 않는 루틴을 선언 할 수 있습니다 , 다른 의미를가집니다 :

void* vague_pointer; 

이것은 포인터를 선언하지만 지정하지는 않습니다 어떤 데이터 유형인지 가리 킵니다.

+0

고맙습니다. – suhel

+12

에 도움이 될 것이며, 무효 포인터가 가리키는 것을 지정하지 않았으므로, 그것에 수학을 수행 할 수 없습니다. 컴파일러는 메모리의 다음 항목으로 이동하기 위해 포인터를 얼마나 멀리 움직일 지 알 수 없습니다. – fennec

+3

'void MyRoutine();'은 프로토 타입이 아닌 C99에 의해 폐기 된 구식 (K & R C) 함수 선언입니다. 대신 void MyRoutine (void);를 써야합니다. – Jens

4

C 표준은 void이 완료 할 수없는 불완전한 유형이라고 말합니다 (완성 될 수있는 다른 불완전한 유형과 달리). 즉, 연산자를 void에 적용 할 수 없지만 불완전한 유형의 포인터를 가질 수 있습니다.

21

예, void은 유형입니다. 데이터가 유형인지 여부는 해당 용어를 정의하는 방법에 따라 다릅니다. C 표준은 그렇지 않습니다.

표준은 "객체 유형"이라는 용어를 정의합니다. C99 및 그 이전; void은 개체 유형이 아닙니다. C11에서는 그렇습니다. 모든 표준 버전에서 void유형이입니다. C11에서 변경된 점은 불완전한 유형이 이제는 객체 유형의 하위 집합이라는 점입니다. 이것은 용어의 변화 일뿐입니다. (유형의 다른 종류는 함수 타입이다.)

C99 6.2.6 단락 19 말한다

보이드 유형 값의 빈 세트를 포함하고; 완료 할 수없는 유형 인 불완전한 입니다.

C11 표준은 약간 변화 표현 :

보이드 유형 값의 빈 세트를 포함하고; 을 완료 할 수없는 불완전한 오브젝트 유형입니다.

이것은 불완전한 유형을 포함하는 "객체 유형"의 정의에서 C11의 변경을 반영합니다. 유형 void의 본질에 대해서는 실제로 변경되지 않습니다.

void 키워드

또한 다른 상황에서 사용할 수 있습니다

  • 을 함수 프로토 타입의 유일한 매개 변수 유형으로, 에서, 그것은 함수가 매개 변수가없는 것을 나타냅니다. (C++에서는 빈 괄호를 사용하지만 C에서 다른 것을 의미합니다.)

  • void func(int n)과 같이 함수의 반환 유형으로 함수가 결과를 반환하지 않음을 나타냅니다.

  • void*은 가리키는 대상을 지정하지 않는 포인터 유형입니다. 원칙적으로

, 이러한 용도는 모두 유형void를 참조하지만 당신은 또한 동일한 키워드를 사용하는 일이 바로 특수 구문로 생각할 수 있습니다.

+0

int func()와 int void()의 차이점은 무엇입니까? –

+0

@ funky-nd :'int void()'는 구문 오류입니다. –

관련 문제