问题标签 [compiler-construction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3798 浏览

delphi - 防止在 Delphi 包中隐式导入单位

有没有办法防止 Delphi 中的包隐式导入“包含”列表中未列出的单元?我正在寻找一个编译器指令,如果它试图进行隐式导入,它会使构建失败。

当您将一个包安装到隐式导入单元 A 的 IDE 中,然后您尝试安装另一个真正包含单元 A 的包并且 IDE 告诉您它无法安装该包时,会出现问题,因为单元 A 已经包含在第一个包中如果不应该!

0 投票
4 回答
18553 浏览

c - MinGW“stdio.h:没有这样的文件或目录”

我正在尝试使用 MinGW 在 Windows XP 下编译 C 程序。gcc.exe 给出以下错误:

stdio.h : 没有这样的文件或目录

代码 (hello.c) 如下所示:

我使用批处理文件来调用 gcc。批处理文件如下所示:

我试过选项-I没有效果。我做错了什么?

0 投票
9 回答
812 浏览

.net - 两台机器上的相同源代码产生不同的可执行行为

这是场景:

存储在 SVN 中的 AC# Windows 应用程序项目用于创建可执行文件。通常,构建服务器处理构建过程并定期创建用于测试的构建。在这个特定的例子中,我被要求修改一个特定的构建并创建可执行文件。

我不完全确定构建服务器是否修改了项目文件,但我知道它在用于编译可执行文件的源代码的 SVN 中创建了一个标签。使用该标签,我在第二台机器上检查了代码,这是一台开发机器。然后我在开发机器上编译了源代码。

执行时,在开发机器上编译的应用程序的功能与构建服务器编译的应用程序不完全相同。例如,在测试机器上,应用程序检测到 DateTime Parse execption。但是,构建机器的可执行文件不会引发任何异常。如果我在开发机器上运行可执行文件,则不会引发异常。

所以总而言之,两台机器理论上都使用相同的源代码和项目。
开发机器的可执行文件只能在开发机器上运行。Build 机器的可执行文件适用于每台机器,包括开发机器。

机器的区域设置或时区是否存储在编译的可执行文件中?知道什么可能导致这种行为或如何检查可执行文件以找到可能的差异并纠正它们吗?

不幸的是,我不能拿一台测试机并附加一个调试器。我会尽快。

0 投票
4 回答
786 浏览

java - 在 Java 中产生条件编译时错误

我不是指编译错误,因为我犯了语法错误或其他什么。在 C++ 中,我们可以根据条件创建编译时错误,如下例所示:

在 VS 2005 中,这将输出:

有没有办法在Java中实现这一点?

0 投票
16 回答
212967 浏览

c++ - C 和 C++ 中的静态变量存储在哪里?

在可执行文件的哪个段(.BSS、.DATA、其他)中存储了静态变量,这样它们就不会发生名称冲突?例如:

如果我编译这两个文件并将其链接到重复调用 fooTest() 和 barTest 的 main ,则 printf 语句会独立递增。有意义,因为 foo 和 bar 变量是翻译单元的本地变量。

但是存储分配在哪里?

需要明确的是,假设您有一个可以以 ELF 格式输出文件的工具链。因此,我相信在可执行文件中必须为这些静态变量保留一些空间。
出于讨论目的,假设我们使用 GCC 工具链。

0 投票
18 回答
273394 浏览

compilation - 即时 (JIT) 编译器有什么作用?

与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给一个简洁易懂的描述?

0 投票
2 回答
376 浏览

visual-studio - 组合框项目比较和编译器警告

在 VisualStudio (Pro 2008) 中,我刚刚注意到一些不一致的行为,并想知道其背后是否有任何逻辑推理

在 WinForms 项目中,如果我使用该行

当我将类型对象与类型 MyObject 进行比较时,我收到一个编译器警告,我可能会收到“可能的意外引用”。很公平。

但是,如果我改为使用接口进行比较:

编译警告消失了。

任何人都可以考虑是否有任何逻辑原因导致这种情况发生,或者只是编译器的一个工件不检查接口以获取比较警告。有什么想法吗?

编辑在我的示例中,组合框绑定到一个列表,但该列表是使用生成的list<IMyInterface>.Cast<MyObject>().ToList<MyObject>()

就好像编译器只是假设我绑定到 IMyInterface 列表。

(已更改对象和接口方法以保护无辜者)

0 投票
6 回答
1145 浏览

java - 自动施法有用吗?

将 Java 编译器更改为自动转换是否有任何缺点或潜在问题?在下面的示例中,list.get(0) 的结果将自动转换为变量 hi 的类型。

我知道泛型允许您减少强制转换,但它们这样做的代价是使声明更加困难。对我来说,泛型的好处是它们允许你让编译器执行更多规则——而不是它们减少强制转换(但我没有太多使用它们,所以我有点不了解)。这个提议只会减少要输入的代码量,而不是把它移到另一个地方。还有一些实例不能使用泛型,因为集合可以有不同的对象。如果基于当前使用情况“看起来太令人惊讶”,则可能需要进行语法调整来使用它。

来自:http: //jamesjava.blogspot.com/2007/01/automatic-casting.html

0 投票
7 回答
253 浏览

windows - 一键式编译器

你知道有哪些编译器只需要点击源代码一两次就可以编译吗?必须对其进行配置才能做到这一点不算数,也不必去终端写一两个词。

如果您可以就为什么很少有编译器包含 gui 给出自己的看法,或者只是发送到资源管理器中的编译器列表,则会给出额外的分数!

原因是我希望能够将源代码发送给我的非编程朋友。有些有 sparc 计算机,有些有 x64 多核等。

然后他们将能够编译代码然后删除它,只保存为他们的计算机优化的二进制文件。

0 投票
1 回答
629 浏览

.net - 可以将 Phoenix 编译器用作更强大的 NGEN 吗?

如果您不了解 Phoenix,它是 Microsoft 的一个编译器框架,显然它将成为他们所有新编译器的基础。它可以读取来自 CIL、x86、x64 和 IA64 的代码;并以 x86、x64、IA64 或 CIL 发出代码。

我可以使用它来将纯 .Net 应用程序转换为纯本机应用程序吗?我的意思是,它不必加载任何 .Net .dll(甚至不是 mscoree),并且具有相同的语义?当然,这不包括反射。