C宏定义中的逗号(,)

Gab*_*und 2 c syntax macros definition comma

我以前从未见过这种语法.

#define SNS(s) (s),(sizeof(s)-1)
Run Code Online (Sandbox Code Playgroud)

我正在读这个的方式就是这样SNS(s) = sizeof(s)-1.逗号在做什么?有必要吗?

int     ft_display_fatal(const char *err, unsigned len, int fd, int rcode)
{ 
    UNUSED(write(fd, err, len));
    return (rcode);
}
Run Code Online (Sandbox Code Playgroud)

主要

return (ft_display_fatal(SNS("File name missing.\n"), 2, 1));
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

宏只是文本替换,所以它们可以扩展到你想要的任何东西.在这种情况下,宏被用于扩展为函数的两个参数.该函数需要一个字符串和字符串中的字符数作为参数,SNS()宏生成它们.所以

ft_display_fatal(SNS("File name missing.\n"), 2, 1)
Run Code Online (Sandbox Code Playgroud)

扩展到

ft_display_fatal(("File name missing.\n"),(sizeof("File name missing.\n")-1), 2, 1)
Run Code Online (Sandbox Code Playgroud)

这基本上仅在参数是字符串文字时才有用:sizeof("string")char包含尾随空字节的数组的大小,并-1减去该字节以获取字符串中的重要字符数.这是该函数的len参数ft_display_fatal(我不知道为什么它不能仅仅用于strlen()获取它本身 - 我想这是一个性能优化).