2014-01-21 3 views
1

Как я могу сделать переменную в C с именем, указанным в таблице символов?Переменная с char [] name

что-то вроде:

char name[]; 
gets(name[]); 
int name[] = 0; 

Я надеюсь, что вы знаете, что я имею в виду.

+0

Так динамически названная переменная? – Sinkingpoint

+0

Я не уверен, что вы подразумеваете под именем, указанным в таблице символов. – James

+0

Вы не можете. – Praetorian

ответ

3

C, в отличие от языков сценариев ala Python, или Ruby, к которым вы можете привыкнуть, компилируется, не интерпретируется. Во время выполнения C не имеет таблицы имен имен, таких как вышеупомянутые языки сценариев, эта информация отбрасывается во время компиляции, и, таким образом, любое имя, которое вычисляется во время выполнения, не может быть превращено в адрес.

В конечном счете, поскольку вы описываете это, это невозможно на скомпилированных языках. Однако у нас есть альтернатива, найденная в коллекциях, таких как векторы и HashMaps, которые хранят информацию об именах во время выполнения, что позволяет нам получить к ней доступ. Опять же, к сожалению, у C нет каких-либо встроенных реализаций, но есть некоторые вокруг.

+0

ohhhhhh я вижу, что он имеет в виду на char table Теперь! – James

+0

Если я понимаю, что вы имели в виду по вашему ответу, я не согласен. C делает Quir, фазу препроцессора, которая имеет свой символ и таблицу поиска. – Ion

+0

@Ion Фаза препроцессора является одним из начальных этапов компиляции. Вся эта информация теряется после факта. – Sinkingpoint

2

Вы не можете. По крайней мере, не с функциями ванильного языка C. Но помните, C имеет pointers, который иногда может делать что-то подобное.

Если указатели не то, что вам нужно, вам необходимо будет выполнить команду hash map. Языки программирования более высокого уровня встроены, но C нет.

Вы можете найти библиотеку, но если вы делаете это для обучения, я бы посоветовал имплицировать ее самостоятельно.

1

Это может быть то, что вы хотите. C имеет таблицу поиска в виде таблицы препроцессора, где вы определяете ключевые слова и текст, который идет с ними, которые добавляются во время компиляции. Таким образом, вы можете передать имя или все, что захотите, в качестве аргумента для программы во время компиляции, и если вы правильно ее кодируете, оно будет прикреплять это имя во время этапа препроцессора фазы компиляции к вашей переменной. Этап препроцессора - это то, что смотрит на ваш #include вверху, а также такие вещи, как #ifndef ... # def, #if ... # endif и т. Д., C preprocessor example

+1

Я только что нашел этот [трюк C/C++: статическое построение таблицы поиска] (http://lolengine.net/blog/2011/12/20/cpp-lookup-table-generation) – James

+0

@ Джеймс, это хорошая ссылка для показа поведение препроцессора. – Ion

Смежные вопросы