strlen dans le préprocesseur C?

Est-il possible de mettre en œuvre strlen() dans le C préprocesseur?

Donné:

#define MYSTRING "bob"

Est-il une macro du préprocesseur, X, qui permettez-moi de dire:

#define MYSTRING_LEN X(MYSTRING)
  • Pourquoi auriez-vous besoin de faire cela? N'est-il pas normal d'avoir de la macro étendre à strlen("bob")?
  • Quel est le problème avec #define MYSTRING_LEN 3? Je peux voir qu'il serait utile si, comme vous suffirait de changer MYSTRING et ne pas s'inquiéter MYSTRING_LEN...
  • Je suis en train de travailler sur un petit système embarqué et je suis critique courte du code de l'espace. La strlen() la fonction n'est pas nécessaire. Je suis en essayant d'éviter de coder en dur la longueur des constantes pour toutes les chaînes.
  • Double Possible de Déterminer #définit la longueur de la chaîne au moment de la compilation.
  • Est-il une autre question qui parle de comment le faire pour une constante tableau de pointeurs sur des chaines comme static const char* strings[] = { "foo", "hello" }? La pratique de la macro ci-dessous semble rupture dans ce cas, par exemple, enum string_names { S_FOO = 0, S_HELLO }; static const size_t const string_lengths[] = { STRLEN(strings[S_FOO]), STRLEN(strings[S_HELLO]) } Ici tous les string_lengths membres 8 (taille du pointeur de la souris) au lieu de la longueur de la chaîne. Peut-être que j'ai juste besoin de donner et de l'utilisation strlen au moment de l'exécution :/
InformationsquelleAutor Joby Taffey | 2011-02-16