4

나는 C++ 코드를 해석하는 것이 실용적인 가치를 지니지 않을 수도 있다는 것을 안다.이 질문은 단지 오락과 학습 목적을위한 것이다.C++도 컴파일 대신 해석 될 수 있습니까?

컴파일하는 대신 문으로 C++ 코드 문을 해석 할 수 있습니까? 또한 그 이유를 설명하십시오.

가능하지 않은 경우 해석 할 수있는 언어의 하위 집합이 있습니까?

+4

http://root.cern.ch/drupal 문제의 포인트를 사용하여 반례은 위에서 주어진/content/cint : "CINT는 C 및 C++ 코드의 인터프리터입니다." – fuenfundachtzig

+2

[Cling] (http://root.cern.ch/drupal/content/cling). – Fanael

+0

... 어느 시점에서 CINT를 대체합니다. – fuenfundachtzig

답변

4

"문장 별 진술"의 의미에 달려 있습니다. 대부분의 경우, C++은 엄격하게 일대일 언어입니다. 어떤 것을 사용하려면 이전에 선언했거나 정의해야합니다. 그래서 아무런 문제도 없습니다.

그러나 위에서 아래로의 접근에는 예외가 있습니다. 예를 들어, 클래스 멤버 함수의 본문은 소스 코드에서 어휘 적으로 따르는 클래스 데이터 멤버의 선언을 봅니다. 선언 된 함수 인 inline을 호출 할 수는 있지만 번역 단위에서는 아직 정의되지 않았습니다 (정의는 TU가 끝나기 전에 나타나야합니다).

이러한 개념은 정확히 무엇인지에 따라 "성명 별 진술"의 개념을 위반하거나 위반하지 않을 수 있습니다. 귀하의 의견에 따라

편집는 :

인터프리터는 현재 명령문 과거에는 전망이없는 경우, 그것은 아마도 C++ 코드를 해석 할 수 있도록 노력하겠습니다 수 없습니다.

#include <iostream> 

struct C 
{ 
    void foo() { std::cout << i << '\n'; } 
    int i; 
}; 

int main() 
{ 
    C c; 
    c.i = 0; 
    c.foo(); 
} 

또는

#include <iostream> 

inline void foo(); 

int main() 
{ 
    foo(); 
} 

inline void foo() 
{ 
    std::cout << "x\n"; 
} 
그것은 심지어 인라인 기능을 포함 할 필요가 없습니다

:

extern int i; 

int main() 
{ 
    return i; 
} 

int i = 0; 
+0

다른 말로하면, 통역사가 오는 전화를 찾지 못한다는 의미입니다. 이전 라인에서 필요한 것을 저장할 수 있습니다. 멤버 함수에 액세스 할 수있는 클래스 멤버는 클래스 헤더 파일이 포함되어있는 한 문제가되지 않으며 멤버 정의가 포함되어 있습니다. – danijar

+0

코드 예가 ​​들어있는 업데이트에 감사드립니다. C++의 하위 집합 만이 기본 정의로 해석 될 수 있다는 것이 분명합니다. 수업은 회원 순서가 보장되지 않기 때문에 불가능합니다. 그러나 헤더 파일을 사용하여 멤버 및 메서드 시그니처를 정의하면 어떻습니까? – danijar

+0

@danijar'main'의 정의가 번역 단위의 마지막 선언인지 확인하고 모든 함수 정의가 네임 스페이스 범위 변수보다 앞에 있어야합니다 (함수가 생성자에서 호출 될 수 있기 때문에). – Angew

3

편집과 해석 사이에는 명확한 경계가 없습니다. 일반적으로 해석되는 것으로 간주되는 대부분의 언어는 실제로 일종의 VM 용으로 컴파일됩니다. C++에서도 마찬가지입니다.

+0

좋아, C++을 문장 *으로 해석 할 수 있을까? 나는 대부분의 언어가 해석되는 것으로 간주 되더라도 그것을 더 많이한다는 것을 알고있다. 예를 들어 자바 스크립트는 입력 된 함수 정의 범위를 스캔합니다. 그러나 현재 줄 이상을 스캔하면 컴파일 된 모든 언어가 해석 될 수 있습니다. 그러므로 이것이 경계를 설정하고 싶습니다. – danijar

+0

@danijar : 당신이 의미하는 바에 달려 있습니다. C++ 인터프리터를 작성하여 실제로 컴파일하는 것이 아니라 매번 문장을 검사하여 수행 할 작업을 파악할 수 있습니다. –

+1

@danijar : 대조적으로, 파이썬 용 대화식 최상위를 의미한다면, 가능할 수도 있지만 실제로는 C++이 아니 겠지요. (루스 문이 아닌'main'으로 시작하는 전체 함수를 실행합니다.), 그래서 당신은 언어를 확장 할 것입니다. –

관련 문제