compiler-construction相关内容

构建 IDE/编译器所需的概念

在制作 IDE(例如 SharpDevelop)或编译器/语言解析器时,我需要了解哪些计算机科学主题?我不希望有完整的深入教程列表,而只是列出有助于我改进的主题列表. 我是否认为解析器对语言的语法/语义有一些规则,并根据这些规则验证代码?这似乎是一种简单的方法? 谢谢 解决方案 IDE、编译器和调试器是三种不同的野兽. 以下是我在考虑为模拟语言构建建模工具时发现的一些有趣 ..
发布时间:2022-01-20 21:28:46 其他开发

c++ 编译器会优化掉未使用的返回值吗?

如果我有一个返回对象的函数,但调用者从不使用这个返回值,编译器会优化掉副本吗?(可能总是/有时/从不回答.) 基本示例: ReturnValue MyClass::FunctionThatAltersMembersAndNeverFails(){//对MyClass的成员做一些永不失败的事情返回成功的结果对象;}无效 MyClass::DoWork(){//做一些事情FunctionTha ..
发布时间:2022-01-19 15:19:54 C/C++开发

C++ 构造函数没有返回类型.究竟是为什么?

我在 Google 上搜索过这个问题并阅读了很多帖子,但是有很多不同的答案,所有这些都合乎逻辑,我想知道该主题的专家是否可以揭开这个问题的神秘面纱. 有人说没有返回是因为没有办法返回——语法禁止它——是的,这是有道理的,但我相信所有函数都必须返回一些东西,不是吗?其他人说构造函数会返回新创建的对象本身,这似乎是有道理的,因为在构造函数上使用了赋值运算符.还有一些人有其他有趣的解释. 解 ..
发布时间:2022-01-19 15:12:47 C/C++开发

C中的switch语句:变量以防万一?

#include int main(int argc, char *argv[]){字符 a = 'c';开关('c'){案例一:printf("你好\n");}返回0;} 上面的代码不会为这个错误编译: case 标签不会缩减为整数常量 为什么不允许这样做? 解决方案 明确允许编译器使用高效的二叉树或跳转表来评估 case 语句. 因此,case 语句是编译 ..
发布时间:2022-01-19 10:58:23 其他开发

CompilerParameters.ReferencedAssemblies -- 添加对 System.Web.UI.WebControls 的引用

我正在使用 CodeDomProvider 类在运行时编译类.这适用于仅使用 System 命名空间的类: 使用系统;公开课测试{公共字符串 HelloWorld(){返回“你好世界!";}} 如果我尝试使用 System.Web.UI.WebControls 编译一个类,我会收到此错误: {错误 CS0006:找不到元数据文件“System.Web.UI.WebControls"}Sy ..
发布时间:2022-01-17 08:57:22 C#/.NET

在 Visual Studio C++ 构建中打印日期和时间?

为了构建的目的,我将如何打印日期和时间.即:当我的应用程序的控制台启动时,我想这样做: 二进制构建日期:03/03/2009 @ 10:00AM 我认为这对于所有应用程序在后台对程序员来说都是一个超级有用的功能,尤其是在团队环境中. 有没有一种简单的方法可以在 C++ 中使用 Visual Studio 2008 来执行此操作.谢谢. 解决方案 使用预处理器的__DATE__和_ ..
发布时间:2022-01-17 08:57:14 C/C++开发

使用未指定大小、空括号定义的静态数组?

对于下面的 C++ 代码片段: 类 Foo {诠释一个[];//没有错误};诠释一个[];//错误:“a"的存储大小未知无效酒吧(){诠释一个[];//错误:“a"的存储大小未知} 为什么成员变量也不会导致错误?这个成员变量是什么意思? 我通过 CodeBlocks 8.02 使用 gcc 版本 3.4.5(mingw-vista special). 在 Visual Studio ..
发布时间:2022-01-17 08:56:57 C/C++开发

/optimize C# 编译器密钥的用途是什么?

/是否有完整的优化列表优化 C# 编译器密钥 随处可用? 编辑:为什么默认禁用?是否值得在实际应用中使用? -- 默认情况下,它仅在 Debug 配置中禁用,在 Release 中启用. 解决方案 Scott Hanselman 有一篇博文 展示了/optimize(在 Release Builds 中启用)功能的几个示例. 作为一个总结:/optimize 做了很多没有给出确 ..
发布时间:2022-01-17 08:56:48 C#/.NET

使用默认参数的构造函数重载

我不小心在 C# 中重载了一个构造函数,如下所示: public MyClass(string myString){//这里有一些代码}public MyClass(string myString, bool myParameter = false){//这里有一些不同的代码} 使用此代码,我的项目编译得很好.如果我只用 string 参数调用构造函数,C# 如何决定我要使用哪个构造函数?为什 ..
发布时间:2022-01-17 08:56:40 C#/.NET

每次 GCC 进行优化后获取汇编代码?

来自维基百科上的优化编译器, 编译器优化通常使用优化转换序列实现,这些算法采用程序并对其进行转换,以生成使用较少资源的语义等效输出程序. 而且 GCC 有 很多 优化选项. 我想研究在使用 -O1、 等不同标志编译时 GCC 执行的每次优化后生成的程序集(-S 给出的程序集)-O2、-O3等 我该怎么做? 编辑:我的输入将是 C 代码. 解决方案 中间表示可以 ..
发布时间:2022-01-17 08:56:31 其他开发

让 GCC 编译而不插入对 memcpy 的调用

我目前正在使用为 PowerPC 440 编译的 GCC 4.5.3,并且正在编译一些不需要 libc 的代码.我没有直接调用 memcpy(),但编译器似乎在构建过程中插入了一个. 有 -nostdlib、-nostartfiles、-nodefaultlibs 等链接器选项,但我无法使用它们,因为我没有进行链接阶段.我只是在编译.像这样: $ powerpc-440-eabi-gcc ..
发布时间:2022-01-17 08:56:22 其他开发

解析上下文相关语言

我正在阅读 Terence Parr 的 Definitive ANTLR reference,他说: 语义谓词是一个强大的识别上下文相关的方法通过允许语言结构要驱动的运行时信息识别 但是书中的例子很简单.我需要知道的是:ANTLR 可以解析 context-sensitive 规则,例如: xAy --> xBy 如果 ANTLR 无法解析这些规则,是否还有其他工具可以处 ..

跟踪间歇性的“对象引用未设置为对象的实例."构建错误

我可以使用一些帮助来追踪我在 ASP.Net 项目中一直存在的间歇性错误. 在构建解决方案时,构建会间歇性地失败,并出现错误“/: Build (web): Object reference not set to an instance of an object".该错误没有关联的文件、行、列或项目信息.这个错误的奇怪之处在于它会在连续的重建中消失,并且似乎不会导致我们在构建成功后遇到的任何 ..
发布时间:2022-01-17 08:55:57 C#/.NET

为什么空引用异常不能命名具有空引用的对象?

在我看来,我的大量调试时间都花在了追踪复杂语句中的空引用异常上.例如: _GamesToOpen.GetIterator() 中的每个游戏 As IHomeGame 为什么,当我得到 NullReferenceException 时,我可以得到堆栈跟踪中的行号,而不是等于 null 的对象的名称.换句话说,为什么: 对象引用未设置为对象的实例. 而不是 _GamesToOpen 未设置 ..
发布时间:2022-01-17 08:55:44 C#/.NET

链接布尔值给出与预期相反的结果

我不假思索地编写了一些代码来检查结构的所有值是否都设置为 0.为此我使用了: bool IsValid() {返回!(0 ==年==月==日==小时==分钟==秒);} 其中所有结构成员都是无符号短类型.我将代码用作更大测试的一部分,但注意到它对于不为零的值返回 false,对于所有等于零的值返回 true - 与我的预期相反. 我把代码改成了: bool IsValid() {返回 ..
发布时间:2022-01-17 08:55:36 C/C++开发

除了检查发出的机器代码之外,我如何找到 C++ 编译器如何实现某些东西?

假设我制作了一组类来抽象某些东西,现在我担心我的 C++ 编译器是否能够剥离这些包装并发出非常干净、简洁和快速的代码.如何找出编译器决定做什么? 我知道的唯一方法是检查反汇编.这适用于简单代码,但有两个缺点 - 编译器在再次编译相同代码时可能会有所不同 而且机器码分析也不是小事,所以很费功夫. 我还能如何找到编译器如何决定实现我在 C++ 中编写的代码? 解决方案 恐怕你在这方 ..
发布时间:2022-01-17 08:55:26 C/C++开发