我正在使用Visual Studio2017。在C 中,我试图将指针分配给"此"指针。它显示编译器误差为"分配为'此(过时("。过时意味着将某些东西添加到不可能的时期中,例如罗马皇帝检查计算机。编译器也这样的警告也是如此。或编码"过时"一词时是否有任何特定含义?
好前一段时间,this
指针可以分配值。我在CFRONT编译器的代码中遇到了此类作业。我在此注释中写了有关它的文章:庆祝第一个C 编译器成立30周年:让我们找到其中的错误。示例:
expr.expr(TOK ba, Pexpr a, Pexpr b)
{
register Pexpr p;
if (this) goto ret;
....
this = p;
....
}
inline toknode.~toknode()
{
next = free_toks;
free_toks = this;
this = 0;
}
过时的事物很久以前还可以,但不再是。
从 c 98 开始,this
是一个rvalue,因此无法分配(即无法从分配操作员出现在左侧(。参见§ 9.3.2 this
指针:
在非静态(9.3(成员函数的主体中,关键字
this
是 non-l-lvalue 表达式,其值是称为函数的对象的地址。
从C 11开始,this
被指定为prvalue
。
来自Google:
属于或适合其存在的时期,尤其是一个明显老式的事物。
基本上意味着过去曾经允许(可能是按照符合标准的编译器(,但不再允许。
这个问题激发了我的好奇心,因此我挖掘了我拥有的所有批准的C 标准和技术误解的副本(它可以介绍到C 98和C 之间的所有内容。包括的(。它们都以任何形式包含"过时"一词。
Ellis and Stroustrup的ARM(C 注释的参考手册(,1990年(为指导C 标准开发的基本文件(的第18.3节标题为" Anchronisms"。该部分的第一段
实施可以提供此处提供的扩展,以简化C 程序的使用或从早期的C 实现提供连续性。请注意,这些功能中的每一个都有不良的方面。提供它们的实施也应为用户提供一种确保它们不在源文件中发生的方式。C 实现没有义务提供这些功能。