Это невозможно, так как определения решаются во время компиляции - не во время выполнения. Препроцессор просто заменит каждое ваше определение до, оно будет скомпилировано с тем, что вы там определили. Если строка содержит первый символ a #
(или только пробелы перед), она передается в директиву preprocessor.
Вы хотите написать что-то наподобие anotherArr["foo"] = "bar";
? В C++ вы можете использовать только зЬй :: Карту для этого:
std::map<std::string, std::string> map;
map["foo"] = "bar";
Но чтобы решить вашу проблему в C вы бы нужно что-то еще, потому что нет никакой стандартной структуры данных, чтобы сделать что-то подобное. Но то, что вы, вероятно, можно использовать есть Хеш - т.е. http://troydhanson.github.io/uthash/index.html
#include <string.h> /* strcpy */
#include <stdlib.h> /* malloc */
#include <stdio.h> /* printf */
#include "uthash.h"
struct my_struct {
char name[10]; /* key (string is WITHIN the structure) */
int id;
UT_hash_handle hh; /* makes this structure hashable */
};
int main(int argc, char *argv[]) {
const char **n, *names[] = { "joe", "bob", "betty", NULL };
struct my_struct *s, *tmp, *users = NULL;
int i=0;
for (n = names; *n != NULL; n++) {
s = (struct my_struct*)malloc(sizeof(struct my_struct));
strncpy(s->name, *n,10);
s->id = i++;
HASH_ADD_STR(users, name, s);
}
HASH_FIND_STR(users, "betty", s);
if (s) printf("betty's id is %d\n", s->id);
/* free the hash table contents */
HASH_ITER(hh, users, s, tmp) {
HASH_DEL(users, s);
free(s);
}
return 0;
}
synatx немного отличается здесь - но я думаю, что это может решить проблему, которую вы пытались решить с динамически #define
во время выполнения.
Это невозможно, потому что определение разрешено во время компиляции - не во время выполнения. – Constantin
"* Любой ключ? *" Возможно, выберете другой язык? – alk