遵守标准有多重要?

2024-01-26

对于像 C++ 这样的语言来说,标准的存在是必须的。好的编译器会尽最大努力(至少是大多数好的编译器)来遵守。许多编译器都有语言扩展,其中一些是标准允许的,有些则不允许。后一种例子有2个:

  1. gcc 的 typeof

  2. 微软的编译器允许纯虚函数声明同时具有纯说明符(= 0)和定义(这是标准所禁止的 - 让我们不讨论为什么,这是另一个主题:)

(还有很多其他例子)

这两个示例在以下意义上都很有用:example1 是一个非常有用的功能,将在 c++0x 中以不同的名称提供。 example2 也很有用,微软已决定不遵守毫无意义的禁令。

我很感激编译器提供了语言扩展来帮助我们开发人员完成日常工作。但这里有一个问题:难道不应该有一个选项,在设置时要求编译器尽可能符合标准,无论它们是否同意标准。例如,Visual Studio有这样一个选项,称为禁用语言扩展。但是,嘿,他们仍然允许 example2。

我希望大家能够正确理解我的问题。 MSVC 允许 example2 是一件很棒的事情,我非常希望该功能能够出现在标准中。它不会破坏任何兼容的代码,也不会做任何坏事。这只是不标准。

当禁用语言扩展设置为 true 时,您希望 Microsoft 禁用 example2 吗?请注意,microsoft、example2 等词是占位符:) 为什么?

再次强调,只是为了确定一下。关键点是:当编译器提供一个非标准的更好的替代方案时,编译器是否应该为某个功能提供一个兼容的版本(可以在设置中设置)(在其限制内,例如我不是在谈论导出)。甚至可能是标准的超集,因此不会破坏任何东西。


标准合规性很重要,其根本原因是它使您的代码更易于维护。这体现在很多方面:

  • 从编译器的一个版本移植到另一个版本。我曾经不得不发布一个从 VC6 到 VC9 的 120 万个 LOC 应用程序。 VC6 因严重不合规而臭名昭著,即使它是新的。即使在新编译器以最低警告级别拒绝的最高警告级别上,它也允许不合规的代码。如果代码一开始就以更合规的方式编写,那么这个项目就不会(不应该)花了3个月的时间。

  • 从一个平台移植到另一个平台。正如你所说,当前的 MS 编译器具有语言扩展。其中一些由其他平台上的编译器共享,有些则不然。即使它们是共享的,行为也可能略有不同。编写兼容的代码,而不是使用这些扩展,可以使您的代码从一开始就是正确的。 “移植”变得简单地把树拉下来并进行重建,而不是挖掘应用程序的内部试图找出为什么 3 位是错误的。

  • C++ 由标准定义。编译器使用的扩展改变了语言。如果您使用标准 C++ 而不是您的编译器支持的方言,那么了解 C++ 但不了解您的编译器使用的方言的新上线程序员将更快地掌握速度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

遵守标准有多重要? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • PHP上传时临时文件保存在哪里?

    我在 Windows 上使用 XAMPP 通过印刷 FILES file tmp name 看来临时文件保存在C xampp tmp phpABCD tmp 但我在服务器的文件系统上看不到它 但是 可以通过以下方式移动或复制文件move u
  • Spring - 设置HandlerMapping优先级

    如何在 Spring 中设置处理程序映射的优先级 以允许资源处理程序在控制器请求映射之前进行映射 例如这个配置 Configuration EnableWebMvc ComponentScan org commons sandbox pub
  • 如何从 SKSpriteNode 或 SKTexture 获取像素颜色?

    我想在游戏地图上精确选择我的对象 对象是一个精灵 周围有一些透明像素 我想测试这些透明像素的触摸位置 有什么线索吗 在 Sprite Kit 中 您无权访问纹理数据 相反 您必须从图像创建位掩码 例如通过将图像加载为 UIImage 或 C
  • 如何判断 Bash shell 脚本中是否未定义字符串

    如果我想检查空字符串我会这样做 z mystr 但是如果我想检查变量是否已定义怎么办 或者 Bash 脚本没有区别吗 我认为你所追求的答案是隐含的 如果没有说明的话 Vinko https stackoverflow com users 5
  • 当目标是网络路径时,FileUtils.copyFile() 不会创建文件(在 Windows 上)

    我正在使用 apache commonFileUtils copyFile https commons apache org proper commons io apidocs org apache commons io FileUtils
  • 如何学习 C 调试和最佳实践 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我用 C 语言编写了一个 Apache 模块 在某些条件下 我可以让它出现段错误 但我不知道为什么 此时 它可能是我的代码 可能是我编
  • 适用于 iOS 应用程序的 WCF 或 Web 服务 (.asmx)?

    我对网络开发和网络服务相当陌生 我一直在使用 C 在 NET 中尝试传统的 Web 服务 asmx 有人建议现在很多服务都使用 WCF 我想知道我是否应该学习 WCF 并使用它与我的 iOS 应用程序进行通信 看起来 WCF 会有一点学习曲
  • 如何在 Next.js 中使用 props 输入页面组件?

    我正在寻找正确的注释Home函数组件的参数 但遇到了一点麻烦 我希望将其注释为 events events Event 但收到 TypeScript 错误 Property events does not exist on type chi
  • 如何将输入元素(文本/选择/单选)的值发送到node.js服务器

    如何接收单选按钮和选择列表的值并将其放在文件名中 这是将使用这些值的函数 router get import function req res next var csvStream fastCsv on data function data
  • Thymeleaf/Spring - 将项目添加到从组合框到表格的列表中

    情况 有一个类称为 工具 这个工具类有一个 分发点 列表 在用户界面上 用户从组合框 也称为选项 HTML 中选择一个项目 分发位置 并将其添加到表中 然后 用户单击表单上的 提交 表格上的所有内容都会绑定到一个列表 Problem Spr
  • Mysql 数据库连接被拒绝

    我正在尝试让我的 Symfony 3 应用程序在 Amazon EC2 实例上以生产模式运行 我将代码放在正确的位置 然后尝试通过运行来设置与 Composer 的任何依赖关系 export SYMFONY ENV prod compose
  • ReactJs 全局辅助函数

    问题 我有很多小的辅助函数 它们不一定需要存在于组件中 或者也许它们可以 但它们会使该组件因大量代码而变得臃肿 我懒惰的一面只是想让这些全部都存在组件可以调用的某种全局函数 我真的很想编写好的 ReactJs 代码 问题 Reactjs 中
  • 从命令行(终端)启动 Pycharm

    我想尝试使用 PyCharm 进行明智的数学开发 通常我运行 eclipse 进行 sage 开发 但现在我想尝试使用 PyCharm 要使用 sage 环境变量启动 eclipse 在命令行中我通常执行以下操作 sage sh cd pa
  • 是否有相对 jQuery 选择器之类的东西?

    我有一个对 jquery 对象的引用this多变的 我正在寻找一种将子选择器应用于对象的方法 我在用着 this find table gt tbody gt tr gt td 但我的目标更像是 Value of this goes her
  • 全新 python 3.3.5 安装时出现 _socket 模块导入错误

    我安装了 python 3 35 并收到此错误 Traceback most recent call last File C Users Augusto PycharmProjects Plot Database py line 48 in
  • 那么属性在 void 类型上不存在,打字稿错误

    Code reset let alert this AlertCtrl create buttons ok this userservice passwordreset this email then res any gt if res s
  • 在 RESTful 架构中移动资源

    我有一个代表流程和活动的 RESTful Web 服务 每项活动都在一个且仅有一个进程内 我想表示当前所在进程与另一个进程之间的活动 移动 操作 我查看了论坛 发现人们建议使用不太标准的 MOVE 操作 其他人建议使用 PUT 但我不确定如
  • VS 2008 中的“多线程调试 DLL”运行时库选项到底在做什么?

    我在 VS 2008 中有一个创建 DLL 的解决方案 然后我在另一个应用程序中使用该 DLL 如果我进入 DLL 项目属性页并更改 DEBUG 构建的以下配置 则构建的 dll 将不再提供所需的功能 如果我把它改回来并重建 DLL 那么
  • 正则表达式中的最大十六进制值

    不使用u标志可以使用的十六进制范围是 x 00 x ff 但与u标记它达到 4 字节值 x 7fffffff x 00000000 x 7fffffff 所以如果我执行下面的代码 preg match x 00000000 x 800000
  • 遵守标准有多重要?

    对于像 C 这样的语言来说 标准的存在是必须的 好的编译器会尽最大努力 至少是大多数好的编译器 来遵守 许多编译器都有语言扩展 其中一些是标准允许的 有些则不允许 后一种例子有2个 gcc 的 typeof 微软的编译器允许纯虚函数声明同时