2014-12-24 5 views
0

C 또는 C++ 프로그램에서 호출 할 수있는 모든 기능에 대한 정보를 얻는 방법이 있습니까? 아마도 일종의 컴파일러 매크로일까요? 나는 소스 파일이나 .o 파일을 가져 와서 심볼이나 프로토 타입을 얻을 수있는 프로그램이 있다는 것을 알고 있으며, 나는 ac 프로그램 내에서 그 프로그램을 실행할 수 있다고 생각한다. 그러나 아마도 함수 포인터를 함수 나 함수로 반환하는 것에 대해 궁금하다. 현재 범위에서 사용할 수있는 함수 프로토 타입의 배열 또는 관련 항목?C/C++에서 사용 가능한 모든 함수 프로토 타입을 나열 하시겠습니까?

저는이 말을 아주 잘 말하지는 못하지만,이 질문은 프로그램 내에서 프로그램에 대해 배울 수있는 호기심의 일부입니다. 나는 내가 바라는 것이 무엇인지 의심 스럽다. 그러나 나는 호기심이 많다.

편집 : 궁금한 내용은 C 또는 C++에서 반사가 가능했는지 여부를 잘 표현하는 방법을 알 수없는 것 같습니다. 답변 해 주셔서 감사합니다.

+1

c/C++ 프로그램에서 수십억 개의 함수를 호출 할 수 있습니다. 모두 필요합니까? –

+0

나는 호기심을 보았습니다 .... 당신이 원하는 것을 구체적으로하십시오. –

+0

아니요. OS가 제공하는 표준 라이브러리를 살펴보십시오. –

답변

5

언어는 아직 reflection을 지원하지 않습니다. 그러나 일부 정보 소스를 찾고 있으므로 Boost.Reflect 라이브러리를 살펴보고 코드에 리플렉션을 어느 정도 추가 할 수 있도록하십시오. 또한 자동 코드 분석을 수행 할 수있는 라이브러리의 경우 ClangToolinglibclang을 확인하십시오.

4

C 및 C++에는 사용 가능한 모든 기능 중이라는 이름을 수집 할 수있는 방법이 없습니다.

은 매크로를 사용하여 표준 (ANSI, ISO, POSIX 등) 규격을 테스트 한 다음 각 표준 기능의 존재를 보장하는 데 사용할 수 있습니다. 예를 들어

, _POSIX_C_SOURCE가 정의되어있는 경우, 당신은 (보통) POSIX에 의해 지정된 기능을 사용할 수 있다고 가정 할 수 있습니다

#ifdef _POSIX_C_SOURCE 
/* you can safely call POSIX functions */ 
#else 
/* the system probably isn't POSIX compliant */ 
#endif 

편집 : Linux 시스템에 있다면, 당신은 찾을 수 있습니다 일부 공용 매크로는 feature_test_macros(7) 아래에 있습니다. OS X와 ​​BSD는 매뉴얼 페이지가 없을지라도 대략 같은 매크로를 가지고 있어야합니다. Windows는 WINVER_WIN32_WINNT 매크로를 사용하여 릴리스 간 기능 표시 여부를 제어합니다.

1

메타 프로그래밍 능력이 약하며 반사 형태를 포함하지 않습니다. 그러나 gcc-xml과 같은 도구를 사용하여 C++ 프로그램을 구문 분석하고 해당 내용을 더 쉽게 분석 할 수있는 형식으로 내보낼 수 있습니다.

함수 선언을 추출하기 위해 C++ 용 파서를 작성하는 것은 특정 프로젝트에서만 수행해야하는 경우가 아니면 악몽이 될 것이므로 일부 모서리를자를 준비가되어 있습니다.