【问题标题】:ANSI C variable declaration syntax "+0"?ANSI C 变量声明语法“+0”?
【发布时间】:2012-08-09 18:20:01
【问题描述】:

我必须在PC上使用外国C代码(最初运行在嵌入式硬件上),我不允许修改。

一个 .h 文件中的一些变量声明如下所示:

extern int variableA;
extern variableB;
extern variableC+0;
  • 变量A 的声明很明确。
  • variableB 的声明通过编译器,类型假定为 int。
  • variableC 声明失败。

问题: 变量C的声明使用什么样的语法?如何让编译器接受它(不允许修改代码)?这甚至是有效的 C 语法吗?

项目使用的编译器是VS2008内部编译器。

更新:

我追溯了包含,并且没有#define 更改该语法。仅供参考,该代码来自机载硬件,并且可以正确编译(使用硬件的编译器)。该变量在我可用的代码部分中用作常规变量:

variableC+0 = otherVar;

感谢您的回复,这似乎是无效的标准 C 代码,仅适用于该特定编译器。

【问题讨论】:

  • 这看起来根本不像一个有效的语法。至少不是 ANSI C
  • 您还有什么其他信息?后面的代码中如何使用 variableC?它可能是一个宏,以便extern variableC+0; 扩展为extern a=3+0; 之类的东西吗?你有证据证明这段代码曾经编译成功吗?是否因为预处理器条件而未编译的代码?
  • 声明int a + 0; 也没有意义,而且看起来是类似的构造。
  • 次要的挑剔:这些是声明,而不是定义
  • 原始源代码是用非 ASCII 字符编写的,编码是否损坏?代码是否在编译之前进行了额外处理?你确定这不是“工作保障”吗?您确定源代码没有因硬件/软件故障而损坏吗?

标签: c syntax definition


【解决方案1】:

这种语法在 C 标准中没有任何意义。

【讨论】:

  • 也许是因为答案没用即使它是正确的(我没有投反对票)
【解决方案2】:

根据MSDN,这是无效的语法。

 identifier:

    nondigit

    identifier nondigit

    identifier digit

nondigit: one of

    _ a b c d e f g h i j k l m n o p q r s t u v w x y z

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

digit: one of

    0 1 2 3 4 5 6 7 8 9

没有任何优点。 我认为,任何类 C 语言的解析器都会将加号解析为 sum 表达式。

【讨论】:

  • 感谢您的保证,那么这必须是某种语法,仅在特定编译器上有效。代码来自机载硬件,是的,代码在那里编译。在我可用的代码部分中,变量“variableC+0”作为有效变量处理,例如 variableC+0 = otherVariable;
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2022-06-17
相关资源
最近更新 更多