2011-12-25 6 views
8

코드 전체에서 변수의 유형을 확인할 수 있습니까?런타임시 C에서 변수 유형을 확인하는 방법은 무엇입니까?

예를 들어, 나는 char y = 1을 선언합니다. 기능은 int SomeFunction (int)입니다. 그런 다음 ysomeFunction으로 전달하면 int으로 변환되고 궁극적으로는 int이 반환됩니다.

함수 선언 때문에이 사실을 알고 있습니다. 그러나 someFunction 내부의 변수는 실제로 int이고 변수는 someFunction에서 반환 된 변수가 int 인 것을 확인하고 싶습니다.

C로 수행 할 수 있습니까, 아니면 대신 함수 선언을 사용해야합니까? C 프로그래밍 언어는 런타임에 변수 유형을 검사 할 수있는 메커니즘을 제공합니까?

+2

'someFunction'의 변수는 그렇게 말하기 때문에 사실 _int' int'입니다. – knittl

+0

그래서 C 프로그래밍 언어는 런타임에 변수 유형을 확인하는 메커니즘을 제공하지 않습니다. – JAM

+7

C에서 유형은 컴파일시에만 존재합니다. 런타임에, 그것은 그냥 움직이는 비트의 무리입니다. – Mat

답변

6

코드에서 전달한 유형이 선언 된 방식과 일치한다는 사실에 의존 할 수 있습니다. 그렇지 않은 경우 평범하지 않은 프로그램을 작성할 수 없습니다.

타입 정보는 C로 컴파일시에만 사용할 수 있습니다. 런타임에는 아무 정보도 없으므로 예를 들어 무작위 포인터 뒤에 숨어있는 객체 유형을 알려주는 표준 빌드 인 방식이 없습니다.
그런 종류의 정보가 필요한 경우 컴파일러에 확장 기능이 있는지 (어떤 것이 있는지 모르겠다), 또는 인프라를 제공하는 프레임 워크를 사용하십시오 (glib).
정말로 자신이 굴러가는 경우는 정말입니다.

또는 런타임 유형 정보 지원이 있고 일반적으로 더 복잡한 유형의 시스템을 사용하는 C++을 사용하지만 완전히 다른 언어입니다.

+0

매트 감사합니다. 좋은 대답이 – JAM

+0

@Mat, * "그렇지 않은 경우에는 평범하지 않은 프로그램을 작성할 수 없습니다."* 그래서 평범하지 않은 PHP/Javascript 프로그램은 없다고 말하고 있습니까? – Pacerier

+1

@Pacerier : PHP와 Javascript (그리고 다른 것들)는 동적으로 타입이 지정되며, 언어 의미론은 그것을 중심으로 구축됩니다. C가 정적으로 입력됩니다. – Mat

0

C 유형은 주로 컴파일 타임에 존재합니다.

더 나은 점검을 위해 컴파일러 경고 레벨을 높일 수 있지만 (EG gcc -ansi -pedantic -Wall), 필자는 필요에 따라 강제로 몇 가지 사항을 강요한다고 생각합니다.

일부 작업에서는 수동 유형 관리를 위해 유니온을 사용할 수 있지만 C에서는 형식 검사를 위해 컴파일러를 사용하는 것이 좋습니다.

관련 문제