【发布时间】:2017-09-19 09:22:48
【问题描述】:
在 this tutorial 关于 C 中的套接字编程中,我偶然发现了以下行:
bzero((char *) &serv;_addr, sizeof(serv_addr));
由于某种原因,变量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]
这种对无效语法的一贯用法(据我所知,gcc 似乎同意)让我想知道是否对这种现象有一些解释。
以前有人见过这样的代码吗?任何想法如何意外生成此类代码?
【问题讨论】:
-
哇!你在网上发现了垃圾! ;-)
-
这可能是代码作为 HTML 插入网页的一个特性。
-
它无法编译。您对整个事情进行进一步考虑的理由完全为零。这似乎是由于提供 XML 字符定义的一些失败尝试造成的。
-
你只需要知道一篇关于Unix Network Programming的教程。那是W. Richard Stevens 写的。上帝让他的灵魂安息!
-
这看起来像是一次失败的“规范化”&符号尝试,将源中的每个&符号跟随一些字母序列变成&符号跟随HTML 中的 -by-letters-and-a-semicolon(以及或随后将
&amp;转换为&amp;)。另一个示例是(struct sockaddr *) &cli;_addr, &clilen;);,其中clilen也受到影响,但没有下划线。