Questions tagged «compiler-construction»

标记“编译器构造”应应用于有关编译器编程的问题或有关编译器详细内部工作的问题。请勿使用有关*使用*特定编译器或编译错误的问题。

6
为什么需要.bss段?
我知道的是,全局变量和静态变量存储在.data段中,而未初始化的数据存储在.bss段中。我不明白的是,为什么我们有专用于未初始化变量的段?如果未初始化的变量在运行时分配了值,那么该变量是否.bss仅仍存在于段中? 在以下程序中, a在.data段中,并且b在.bss段中;那是对的吗?如果我的理解是错误的,请纠正我。 #include <stdio.h> #include <stdlib.h> int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9}; int b[20]; /* Uninitialized, so in the .bss and will not occupy space for 20 * sizeof (int) */ int main () { ; } 另外,请考虑以下程序, #include <stdio.h> #include <stdlib.h> …

1
在哪里了解VS调试器的“魔术名称”
如果您曾经使用过Reflector,您可能会注意到C#编译器会生成类型,方法,字段和局部变量,这些应由调试器进行“特殊”显示。例如,以“ CS $”开头的局部变量不会显示给用户。对于匿名方法的关闭类型,自动属性的后备字段等,还有其他特殊的命名约定。 我的问题:在哪里可以了解这些命名约定?有人知道一些文档吗? 我的目标是使PostSharp 2.0使用相同的约定。

8
Qt:找不到-lGL错误
我刚刚重新安装了QtCreator,创建了新项目(Qt Application),编译后得到了这个: /usr/bin/ld: **cannot find -lGL** collect2: error: ld returned 1 exit status make: *** [untitled1] Error 1 18:07:41: The process "/usr/bin/make" exited with code 2. Error while building/deploying project untitled1 (kit: Desktop Qt 5.1.0 GCC 32bit) When executing step 'Make' (项目为空,我没有提交任何更改) 基于Qt 5.1.0(32位) Ubuntu 13.04的Qt Creator 2.7.2 我该如何解决这个问题?

6
(A + B + C)≠(A + C + B)和编译器重新排序
将两个32位整数相加会导致整数溢出: uint64_t u64_z = u32_x + u32_y; 如果首先将32位整数之一转换为64位整数或将其添加到64位整数,则可以避免这种溢出。 uint64_t u64_z = u32_x + u64_a + u32_y; 但是,如果编译器决定重新排序添加项: uint64_t u64_z = u32_x + u32_y + u64_a; 整数溢出仍可能发生。 是否允许编译器进行这种重新排序,还是我们可以信任它们以注意到结果不一致并按原样保留表达式顺序?


3
Android Studio错误的含义:未注释的参数会覆盖@NonNull参数
我正在尝试Android Studio。创建新项目并将默认onSaveInstanceState方法添加到create MyActivity类后,当我尝试将代码提交给Git时,出现了一个我不理解的奇怪错误。代码是这样的: 我得到的错误是这样的: 如果尝试将方法签名更改为protected void onSaveInstanceState(@NotNull Bundle outState),则IDE会告诉我它无法解析该符号NotNull。 我需要怎么做才能摆脱警告?

13
为什么不可能构建可以确定C ++函数是否会更改特定变量的值的编译器?
我在一本书中读到了这一行: 事实证明,构建真正可以确定C ++函数是否会更改特定变量值的编译器是不可能的。 该段讨论的是为什么在检查常量性时编译器为什么会保守。 为什么不可能构建这样的编译器? 编译器始终可以检查是否重新分配了变量,是否在其上调用了非常量函数或是否将其作为非常量参数传入...

8
LR,SLR和LALR解析器之间有什么区别?
LR,SLR和LALR解析器之间的实际区别是什么?我知道SLR和LALR是LR解析器的类型,但是就它们的解析表而言,实际区别是什么? 以及如何显示语法是LR,SLR还是LALR?对于LL语法,我们只需要显示解析表的任何单元格都不应包含多个生产规则。LALR,SLR和LR是否有类似规则? 例如,如何显示语法 S --> Aa | bAc | dc | bda A --> d 是LALR(1)但不是SLR(1)? 编辑(ybungalobill):对于LALR和LR之间的区别,我没有得到满意的答案。因此,LALR的表较小,但只能识别LR语法的一个子集。有人可以详细说明一下LALR和LR之间的区别吗?LALR(1)和LR(1)就足够回答了。他们都使用1个令牌前瞻和双方都表驱动!它们有何不同?


3
如何使用g ++创建静态库?
有人可以告诉我如何从.cpp和.hpp文件创建静态库吗?我需要创建.o和.a吗?我也想知道如何在其中编译静态库并在其他.cpp代码中使用它。我有header.cpp,header.hpp .我想创造header.a。在中测试header.a test.cpp。我正在使用g ++进行编译。

3
为什么此条件(null ||!TryParse)会导致“使用未分配的局部变量”?
以下代码导致使用未分配的局部变量“ numberOfGroups”: int numberOfGroups; if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups)) { numberOfGroups = 10; } 但是,此代码可以正常工作(尽管ReSharper说的= 10是多余的): int numberOfGroups = 10; if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups)) { numberOfGroups = 10; } 我是否缺少某些东西,或者编译器不喜欢我的东西||? 我将范围缩小到dynamic导致问题的范围(options在我上面的代码中是一个动态变量)。问题仍然存在,我为什么不能这样做? 该代码无法编译: internal class Program { #region Static Methods private static void Main(string[] args) { …

14
为什么要编译此Java代码?
在方法或类范围内,下面的行进行编译(带有警告): int x = x = 1; 在类范围中,变量获取其默认值,以下给出“未定义引用”错误: int x = x + 1; 它不是第一个x = x = 1应该以相同的“未定义参考”错误结束吗?还是第二行int x = x + 1应该编译?还是我缺少什么?


14
Xcode 4(和依赖项)的编译,生成或存档问题
在过去的几周中,这个问题有所发展,涵盖了与 xcode4 (并且升级项目的时间较早 代码s)。 但是,通过遵循同一组说明可以解决许多问题。 如果您有以下任何问题,请尝试接受的答案中的方法: Xcode 4无法存档应用 Xcode 4创建了不可用的存档 Xcode 4不会创建.ipa Xcode 4由于预处理器错误而无法编译 Xcode 4找不到标题 Xcode 4的代码完成不起作用 项目相关性无法编译 添加依赖关系会导致上述任何问题 原始问题 标题:Xcode 4中的“找不到词法或预处理程序问题文件” 我在Xcode 4中有一个项目,该项目可以很好地构建并在设备和模拟器上运行,但是在查找与静态库关联的头文件时尝试将其存档时出错: In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15: In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23: In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11: In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10: /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file …

11
自举仍然需要外部支持
我听说过引导语言的想法,即为语言本身编写编译器/解释器。我想知道如何做到这一点,环顾四周,看到有人说这只能由任何一个人完成 用另一种语言编写初始编译器。 在Assembly中手动编码初始编译器,这似乎是第一个的特殊情况 在我看来,这两者似乎都不是在引导语言,因为它们都需要外部支持。有没有办法用自己的语言实际编写编译器?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.