【问题标题】:Possible reasons for semicolon before underscore in variable name in CC中变量名中下划线前分号的可能原因
【发布时间】: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; 转换为 &amp;amp;)。另一个示例是(struct sockaddr *) &amp;cli;_addr, &amp;clilen;);,其中clilen 也受到影响,但没有下划线。

标签: c syntax


【解决方案1】:

这似乎与下划线无关(_);相反,它看起来像是规范化 & 符号的失败尝试 (&amp;amp;)。 & 符号在 HTML 中用于表示使用(以及其他形式)&amp;name; 的特殊字符。例如。 &amp;lt; 代表 &lt;&amp;quot; 代表 "&amp;amp; 代表 &amp;amp; 本身。

似乎原始源代码中的每个 &ampersand-followed-by-letters 序列都已替换为 &ampersand-followed-by-letters-and-a -HTML 中的分号(可能是错误地认为这些是“未终止”和符号结构)。源代码中的另一个示例说明了这一点:

(struct sockaddr *) &cli;_addr, &clilen;);

这里&amp;cli_addr&amp;clilen 都添加了分号,即使后者不包含下划线。

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

(sockfd, (struct sockaddr *) &amp;cli;_addr, &amp;clilen;);

【讨论】:

    【解决方案2】:

    以前有人见过这样的代码吗?

    不是我。

    您知道如何意外生成此类代码吗?

    查找和替换操作。

    authot 找到了他想要替换的内容,并意外地将其替换为 serv;_addr,在所有出现的原始字符串中都自动使用了它。

    【讨论】:

    • 还有&amp;cli;_addr,所以只是对&amp;serv;_addr的错误查找和替换并不能解释问题。
    猜你喜欢
    • 2017-08-12
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2011-10-16
    • 2011-04-08
    • 2019-04-08
    相关资源
    最近更新 更多