Man*_*bts -1 c c++ compiler-construction visual-studio
struct elem
{
int i;
char k;
};
elem user; // compile error!
struct elem user; // this is correct
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们收到第一个声明的错误.但是C++编译器不会发生此错误.在C++中,我们不需要一次又一次地使用关键字struct.
那么为什么没有人更新他们的C编译器,以便我们可以在C++中使用没有关键字的结构?
为什么C编译器开发人员不会删除C的一些故障,如上所述,并更新一些高级功能而不破坏C的原始概念?
为什么它是从1970年代更新的旧编译器?
看看视觉工作室等.它经常更新新版本,每个新版本我们都要学习一些新的功能用法(尽管这是一个我们可以解决它的问题).如果有的话,我们也会更新新的编译器.
不要把这当作一个愚蠢的问题.为什么不可能?它可以在没有任何不兼容问题的情况下开发(不影响在当前/旧编译器上开发的代码)
好的,我们开发新的C语言C +,它介于C和C++之间,它消除了C的所有故障,并添加了C++的一些高级功能,同时保持它对系统级应用程序,嵌入式系统等特定应用程序有用.
Mir*_*cek 15
typedef struct
{
int i;
char k;
} elem;
elem user;
Run Code Online (Sandbox Code Playgroud)
会很好地工作.正如其他人所说的那样,它是关于标准的 - 当你在VS2008中实现它时,你不能在GCC中使用它,甚至在GCC中实现它时,你肯定不会编译其他东西.以上方法随处可见.
另一方面 - 当我们有boo类型的C99标准时,for()循环和块中间的声明 - 为什么不是这个特性呢?
Mic*_*man 10
首先,编译器需要支持该标准.即使标准在后见之明看起来很尴尬,这也是事实.其次,编译器供应商会添加扩展.例如,许多编译器支持这一点:
(char *) p += 100;
Run Code Online (Sandbox Code Playgroud)
将指针移动100个字节而不是100 p指针的任何类型.严格来说,这是非标准的,因为演员删除了左值p.
非标准扩展的问题在于您不能指望它们.如果您想要切换编译器,使代码可移植或使用第三方工具,那么这是一个大问题.
C在很大程度上是自身成功的牺牲品.使用C的主要原因之一是可移植性.几乎所有硬件平台和操作系统都有C编译器.如果您希望能够在C中编写代码的任何地方运行代码.这会产生巨大的惯性.在不牺牲首先使用该语言的最佳方法之一的情况下,几乎不可能改变任何东西.
软件开发人员的结果是您可能需要写入最小的公分母,通常是ANSI C(C89).例如:运行下一版本Perl的虚拟机Parrot正在用ANSI C编写.Perl6将具有非常强大和富有表现力的语法,并且在语言中融入了一些令人费解的概念.但是,实现是使用几乎完全相反的语言构建的.原因是这将使perl可以在任何地方运行:PC,Mac,Windows,Linux,Unix,VAX,BSD ......
未来的C标准永远不会采用这种"特性" ,原因只有一个:它会严重破坏向后兼容性.在C中,struct标签具有与普通标识符不同的名称空间,这可能会也可能不会被视为特征.因此,这个片段:
struct elem
{
int foo;
};
int elem;
Run Code Online (Sandbox Code Playgroud)
在C中完全没问题,因为这两个元素位于不同的名称空间中.如果未来的标准允许您声明没有struct限定符或适当的typedef的struct elem,则上述程序将失败,因为elem被用作int的标识符.
事实上,未来的C标准确实打破向后兼容性的一个例子是当C99不允许没有显式返回类型的函数时,即:
foo(void); /* declare a function foo that takes no parameters and returns an int */
Run Code Online (Sandbox Code Playgroud)
这在C99中是非法的.但是,仅仅通过添加int返回类型来使这个C99兼容是微不足道的.如果突然的struct标签没有单独的命名空间,那么"修复"C程序并不是那么简单.
我发现当我实现C和C++的非标准扩展时,即使人们请求它们,它们也不会被使用.C和C++世界绝对围绕严格的标准合规性.许多这些扩展和改进已经在D编程语言中找到了肥沃的土壤.
Walter Bright,数字火星
仍然使用C的大多数人使用它是因为他们要么:
| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |