C中变量名称中下划线之前分号的可能原因

Lai*_*oni 2 c syntax

本教程中关于C语言中的套接字编程,我偶然发现了以下行:

bzero((char *) &serv;_addr, sizeof(serv_addr));
Run Code Online (Sandbox Code Playgroud)

由于某种原因,变量serv_addr被写为serv;_addr将其作为参考传递.它看起来像一个拼写错误(并且似乎也没有使用标准标志进行编译),但是这种用法在整个代码中是一致的 - 每当包含下划线的变量名称作为引用传递时,在下划线之前插入分号:

if (bind(sockfd, (struct sockaddr *) &serv;_addr,
    sizeof(serv_addr)) < 0) 
    error("ERROR on binding");
[...]
newsockfd = accept(sockfd, 
    (struct sockaddr *) &cli;_addr, &clilen;);
[... and some more occurences]
Run Code Online (Sandbox Code Playgroud)

这种一致的用法(据我所知,gcc似乎同意)无效的语法让我想知道这种现象是否有一些解释.

以前有人见过这样的代码吗?有任何想法如何意外生成这样的代码?

Tri*_*und 7

这似乎与下划线(_)没有任何关系; 相反,它似乎是对标准化&符号(&)的失败尝试.&符号构造在HTML中用于表示使用(以及其他形式)的特殊字符&name;.例如&lt;对于<,&quot;对于"&amp;&本身.

似乎原始源代码中的每个&符号后跟字母序列已被HTML中的&符号后跟字母和分号所取代(可能错误地认为这些是" 未终结的" "&符号 - 结构".源代码中的另一个示例演示了这一点:

(struct sockaddr *) &cli;_addr, &clilen;);
Run Code Online (Sandbox Code Playgroud)

这里既有&cli_addr&clilen增加了分号,即使后者不包括下划线.

同时,或者在随后的"清理"中,&符号本身已被转换为&amp;,如上面显示的行的HTML源代码所示:

(sockfd, (struct sockaddr *) &amp;cli;_addr, &amp;clilen;);
Run Code Online (Sandbox Code Playgroud)