【发布时间】:2011-06-28 16:02:30
【问题描述】:
是否可以在C预处理器中实现strlen()?
给定:
#define MYSTRING "bob"
是否有一些预处理宏,X,让我说:
#define MYSTRING_LEN X(MYSTRING)
【问题讨论】:
-
为什么需要这样做?宏展开为 strlen("bob") 不行吗?
-
#define MYSTRING_LEN 3有什么问题?我可以看到它会很有用,因为您只需更改MYSTRING而不必担心MYSTRING_LEN... -
我正在开发一个微型嵌入式系统,并且代码空间严重不足。否则不需要 strlen() 函数。我试图避免硬编码所有字符串的长度常量。
-
是否还有另一个问题是关于如何为指向常量字符串的指针常量数组(如
static const char* strings[] = { "foo", "hello" })执行此操作?在这种情况下,下面方便的宏似乎崩溃了,例如enum string_names { S_FOO = 0, S_HELLO }; static const size_t const string_lengths[] = { STRLEN(strings[S_FOO]), STRLEN(strings[S_HELLO]) }这里所有的string_lengths成员都是8(指针的大小)而不是字符串的长度。也许我需要放弃并在运行时使用strlen:/
标签: c c-preprocessor strlen