Job*_*fey 30 c strlen c-preprocessor
是否可以strlen()在C预处理器中实现?
鉴于:
#define MYSTRING "bob"
Run Code Online (Sandbox Code Playgroud)
是否有一些预处理器宏,X让我说:
#define MYSTRING_LEN X(MYSTRING)
Run Code Online (Sandbox Code Playgroud)
nmi*_*els 36
它不使用预处理器,但sizeof在编译时解析.如果您的字符串在数组中,您可以使用它来确定编译时的长度:
static const char string[] = "bob";
#define STRLEN(s) (sizeof(s)/sizeof(s[0]))
Run Code Online (Sandbox Code Playgroud)
请记住,STRLEN上面的事实将包括null终止符,不像strlen().
你可以做:
#define MYSTRING sizeof("bob")
Run Code Online (Sandbox Code Playgroud)
在我的机器上说4,因为null添加到最后.
当然这仅适用于字符串常量.
使用MSVC 16(cl.exe -Wall /TC file.c)这个:
#include "stdio.h"
#define LEN_CONST(x) sizeof(x)
int main(void)
{
printf("Size: %d\n", LEN_CONST("Hej mannen"));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Size: 11
Run Code Online (Sandbox Code Playgroud)
字符串的大小加上NUL字符.
是:
#define MYSTRING_LEN(s) strlen(s)
在大多数编译器中,这将为常量参数生成编译时常量...并且你不能做得更好.
换句话说:你不需要宏,只需使用strlen; 编译器足够聪明,可以为您完成工作.