2014-06-10 2 views
0

사용자로부터 char *를 얻고이 문자열을 내 프로그램의 변수를 참조하는 방법을 찾고 있습니다. 이것은 preprocessor 붙여 넣기 옵션 ##과 유사합니다. 나는 다음과 같은 일을 할 수 있도록하려면 f(int num); 그리고 변수 int x = 1, z = 2;문자열에서 이름을 사용하여 변수를 정의 할 수 있습니까?

그리고 : : 예를 들어 내가하는 기능이 있다고 int y=f(##arg [1]); \\should be equivalent to: int y=f(x) assuming argv[1] ="x"

또는

입력이 "Z는"인 경우 f()에 z를 보내십시오 ...

이 방법을 얻을 수 있습니까?

감사합니다.

편집 : 솔루션이 완벽하게 동적 일 필요는 없으며 사용 가능한 변수를 엄격하게 만드는 것과 같은 몇 가지 가정하에 살 수 있습니다. 즉 허용 된 변수 이름 집합 만 있습니다. 당신이 직접 할 수 없어

+1

이렇게 할 방법이 없다고 생각합니다. 그러나 가능한 경우 디버그하는 것이 엉망으로 심각한 고통이 될 것입니다. –

+0

디버그가 문제가되지 않습니다 ... – ZivS

+0

일반 간단 : C에서는 불가능하지만 asm이 이러한 기능을 제공 할 수 있습니다. 보이는 intresting –

답변

4

는 C.에

C와 함께하는 컴파일 언어에는 내장 반성을 지원합니다.하지

프로그램을 실행하면 변수 이름이 사라집니다. 컴파일러는 사용자가 원하는 것을 알고 다양한 데이터를 참조하기 위해 필요합니다.

그래서이 동작을 얻으려면 이름이 문자열로 유지되는 룩업 테이블 형식을 수동으로 설정해야하며 직접 검색을 구현해야합니다.

1

아니요. 이는 C에서 가능하지 않습니다. 이것은 반사 언어 (Java와는 다른)가 아니기 때문입니다. 컴파일 중 모든 변수 기호가 손실됩니다.

하나의 가능성은 실행 시간 사용을위한 기호 테이블을 구축하기 위해 해시 맵을 사용하는 것일 수 있습니다 (이름과 변수에 대한 포인터를 각각 키와 값으로 사용).하지만 유즈 케이스를 사용하면 그것을 조언하십시오.

관련 문제