2008-10-23 2 views
4

PHP에는 isset ($ variableName)이라는 아주 멋진 함수가 있습니다. $ variableName이 이미 프로그램에 정의되어 있는지 확인합니다.C/C++에서 PHP의 isset()에 대응

C/C++ (일종의 기호 테이블 조회)에 대해 비슷한 기능을 만들 수 있습니까?

답변

11

저는 C++ 사람입니다.하지만 PHP에서 isset은 get/post 요청을 통해 전달 될 때 변수에 값이 포함되어 있는지 확인하는 데 사용됩니다 (다른 용도가있을 것이라고 확신하지만 일반적입니다. 하나는 내가 믿는다).

C++에는 실제로 동적 입력이 없습니다. 따라서 이전에 명시 적으로 정의하지 않은 변수 이름을 갑자기 사용할 수는 없습니다. C++에는 "unset"변수가 없습니다.

"int var;"라고해도 변수를 초기화하지 않으면, 변수는 보통 가비지 값을 가지지 만 여전히 PHP 의미로 "설정"되어 있습니다.

폐문 #define을 사용하여 변수를 정의했는지 확인하는 전 처리기의 #ifdef 및 #ifndef라고 가정합니다. 하지만 내 경험에 의하면 이것은 플래그를 기반으로 코드를 생략하거나 추가하는 데 주로 사용됩니다. 예를 들면 :

// code code code 
#ifdef DEBUG 
// debug only code that will not be included in final product. 
#endif 
// more code more code 

이제 "DEBUG"코드를 포함할지 여부를 결정 #DEFINE를 사용하여 DEBUG를 정의 할 수 있습니다.

아마도 C++에 해당하는 isset을 사용하여 수행하려는 작업에 대해 좀 더 자세히 설명하면 "C++ Way"를 수행하는 방법에 대해 더 잘 알 수 있습니다.

3

아니요. 동적으로 변수를 만들 수는 없지만 (C++에서는 malloc() 등, 또는 기타 등등) 동적으로 저장소를 생성 할 수는 있지만 동적으로로드 된 라이브러리는 그림을 흐리게 보이지만 그곳에도 변수는 그 이름을 검색하는 것입니다. 이름이 없으면 동적으로로드 된 모듈을 작성하기 위해 컴파일러를 실행 한 다음로드하는 것이 부족할 수 있습니다. 이 개념은 C 또는 C++에는 실제로 적용되지 않습니다.

5

언어로 직접 수행 할 수있는 방법은 없습니다.

이 PHP 나 자바 스크립트에서 사용되는 것과 같은 변수를 확인하기 위해
typedef std::map<std::string, int> variables_type; 
variables_type variables; 

variables["var"] = 1; 
if(variables.find("jon") == variables.end()) 
    std::cout << "variable, \"jon\" not set\n"; 

, 구현은 어떤 종류를 사용해야합니다 : 그러나, 다음과 같은지도를 사용하여 이런 종류의 작업을 수행 할 수 있습니다 변형 유형의

1

다른 대답에서 말했듯이 C++ 변수는 결코 정의되지 않습니다. 그러나 변수는 초기화되지 않을 수 있습니다.이 경우 해당 내용은 언어 표준에 지정되어 있지 않습니다 (대부분의 컴파일러에서 해당 메모리 위치에 저장되도록 만들어졌습니다).

일반적으로 컴파일러는 초기화되지 않은 변수를 감지 할 수있는 플래그를 제공하고 활성화되어 있으면 경고를 생성합니다.

또 다른 사용법은 다른 코드를 처리하는 것일 수 있습니다. C++는 정적으로 컴파일 된 언어이므로 심볼을 다시 정의하려고하면 컴파일 시간 오류가 발생하여 isset에 대한 필요성이 제거됩니다.

마지막으로 찾고자하는 것이 null 포인터입니다.이를 위해, 단순한 비교를 사용

int * x(getFoo()); 
if (x) { 
    cout << "Foo has a result." << endl; 
} else { 
    cout << "Foo returns null." << endl; 
} 
0

짧은 답변 : NO

표준 후속 질문 : 당신 정말를 해결하기 위해 노력하고 있습니다 어떤 문제?

0

변수 선언과 변수 내용이 인 두 가지를 구분해야합니다.

PHP와 달리 다른 답변에서 말했듯이 C++에서는 선언되기 전에 변수를 사용할 수 없습니다.

하지만 별개로 초기화 할 수 없습니다.

PHP isset 함수는 변수에 사용 가능한 값이 있는지 알아 봅니다. C++에서 이것은 NULL이거나 유효한 포인터에 가장 적합합니다.

0

제가 생각할 수있는 가장 가까운 것은 실제 변수가 아닌 포인터를 사용하는 것입니다. 그러면 NULL을 확인할 수 있습니다.

그러나 언어에 대한 잘못된 문제를 해결하거나 잘못된 언어를 사용하여 문제를 해결하는 것처럼 보입니다.