2015-02-03 3 views
4

C89에서 "destringification"이 가능합니까? stringification처럼 가능합니까?문자열을 이름 식별자로 변환

+0

일반적으로 묻는 중입니다 (이 경우 대답은 아마도 아니오입니다). 그렇지 않으면 destringifying하여 특정 작업을 수행하려고합니까? –

+0

문자열에 이름이 지정된 변수에 액세스하려고합니다. 변수 이름은 문자열과 비교 될 수 있고이 값은 포인터를 통해이 경우 액세스 할 수 있습니다. 문제는 이러한 것들을 연결하는 방법입니다. –

+0

'void * ** list'를 선언하고 매크로'#define (type, name, init)을 선언하는 것과 비슷한 것은 type name = init; {// 3dallocation, * list [num] = #name & list [num] = name;} ... ' –

답변

0

내 생각에는 매크로 DESTRINGIFY ("hello")가 hello로 확장된다는 의미입니다. 이 경우 NO, C89와 이후 표준에서는 불가능합니다.

+0

웰 이름 식별자는 메모리 어딘가에 문자열로 저장해야합니다. 나는 DESTRINGIFY가 방법 또는 다른 방법으로 가능하다고 생각합니다. –

+1

@ AlanSalios : 아니오, 그들은 대개 메모리에 저장되지 않고 외부 연결이있는 식별자 만 있습니다. – mafso

+0

아하, 그렇습니다. 나는 그것에 대해 잊어 버렸습니다. –

2

변수 이름은 컴파일 할 때 기호 이름으로 변환됩니다. 이 기호는 프로그램 내부에서 액세스 할 수 없으며 이름이 자주 엉망이되지만 어쨌든 C는 내부에서 자신의 런타임에 액세스하는 방법을 제공하지 않습니다. 프로그래밍 언어에서 이런 종류의 기능을 "반사"라고하며 프로젝트의 존재에 의존하는 경우 언어가 포함 된 언어를 찾거나 내가 제안한대로 2D 맵 또는 사전을 사용합니다. 는 각 객체가 고유 한 키 (종종 문자열)와 관련되어있는 데이터 구조이므로 필요에 따라 보이는 것처럼 쉽게 찾을 수 있습니다.