问题标签 [compiler-directives]

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 投票
4 回答
364 浏览

c# - 摆脱 C# 中的预编译器指令

我被要求维护一些不像我想要的那样遗留的代码,并且它充满了编译器指令,使其几乎不可读并且几乎可以维护。一个例子:

using指令更漂亮:

我以为我会试一试,ConditionalAttribute但在这种情况下那行不通

有什么办法可以摆脱这个编译器指令的噩梦吗?

代码是针对.NET 3.5.

更新:
Oded 回答建议删除该BeforeAdd方法周围的编译器指令,从而使其重载。不幸的是,这不起作用,因为这两种方法都应该覆盖一个AbstractBusiness类,该类根据最终包含的程序集提供两种不同的实现:

或者

该代码从公司过去一段时间创建的一组库中获取其依赖关系,并且从那时起一直在“升级”。他们现在拥有这组库的 4 个不同版本,具有冲突的命名空间和不同的实现。全部以使用(非常)旧版本的应用程序的“向后兼容性”的名义。


结论

我最终选择了@Oded 的答案,因为它作为一种通用方法(KISS等等)最有意义。不过在这种情况下我不能使用它;你在这里看到的只是冰山一角。如果它付钱给我,我不想亲吻这个代码。

0 投票
1 回答
130 浏览

c# - 将#defines 从 .h 文件移植到 C# 应用程序的最佳实践是什么?

我正在将应用程序从 C++ 转换为 C#。C++ 应用程序有一个定义文件 .h,其中包含超过 500 个 #define 指令。我想在 Definition.cs 文件中表示这些数据。做这个的最好方式是什么?

定义示例:

#defines 是分组的,所以这让我想到了使用属性,例如:

虽然我必须在构造函数中设置默认值,但我试图避免,它们应该是只读的。

谢谢。

0 投票
2 回答
401 浏览

c# - 使用编译器指令来支持多个平台

这是一个通用的软件设计问题。

使用#if 编译器指令来支持多个平台是否是个好主意。例如,我有三个文件:

IScreen.cs

ScreenWin.cs

ScreenMac.cs

看起来很酷的是我可以使用 BDD 并拥有类似的东西:

并且将根据编译器指令使用正确的屏幕。

与尝试使用抽象工厂相比,这似乎也可以获得更好的性能。

有哪些缺点?

0 投票
2 回答
402 浏览

c - 是否存在使用编译器指令宏的 itoa 替代方案

我想知道是否可以使用字符串化编译器指令对整数变量进行字符串化。我尝试使用:

因此,在字符串化宏(#1)中添加另一个级别将使替换首先发生,然后将其放入代码(#2)中,以类似的方式可以在编译时将变量替换为值。我的意思是说如果 var = value; 那么有什么方法可以让 some_macro(var) --> 将其字符串化为“值”?

0 投票
3 回答
897 浏览

c++ - 是否可以确保复制省略?

复制省略是一种巧妙的优化技术,在某些情况下,依赖复制省略实际上比“手动”传递引用要快。

因此,让我们假设您已经确定了一个关键代码路径,您依靠编译器执行复制省略这一事实来获取代码路径以获得最佳性能。

但是现在您依赖于编译器优化。

是否有任何(编译器特定的,显然)方法来确保实际执行复制省略并在无法执行复制省略时让编译器(或其他工具)生成警告/错误?

(我正在考虑一些与 Visual C++ 很相似的东西,__forceinline如果这样标记的函数没有被编译器内联,则会生成警告。)

0 投票
3 回答
755 浏览

c# - 编译器指令 - 建议 - 仅在调试模式下运行代码

只有当应用程序在调试模式下运行时,我才需要记录消息。我找到了两种方法:

第一:需要记录时需要在任何地方写 3 行。但是,Logger 语句仅在编译时被禁用,这正是我需要的。Logger.Log 根本不会被执行。

第二:非常整洁。需要记录的地方只有一行代码。不确定是否执行 Logger.Log 语句。如果仅在编译时删除函数调用(与第一种方法相同。但是,现在确定代码行没有变灰),我想这样做。

我担心性能差异。

0 投票
2 回答
1726 浏览

debugging - 使用 -compile 在 Erlang 模块中请求 debug_info

我想强制 Erlang 编译器在编译时为特定模块生成调试信息,而不必将debug_info参数添加到编译命令中。我尝试添加

到模块文件,但运行c(my_module)没有在梁文件中包含调试信息。

有没有办法做到这一点,或者无法从模块源文件本身添加调试信息?

0 投票
1 回答
245 浏览

linux - Delphi Prism 中的操作系统指令

由于我正在编写一个最终将在从相同项目文件编译的 Windows 和 Linux 环境上运行的程序,因此我想测试一下操作系统指令的性能如何。所以,我写了一个示例代码。代码似乎意外运行,或者只是我的想象。

这是代码:

现在,当我在 Windows 上运行此方法时,它会弹出一个带有“这是 .NET Framework”的消息框。万岁!!!' 我有点期待它在 Windows 上运行。当我在 Mono 下的 Linux 上运行它时,它会弹出一个带有相同消息的消息框,“这是 .NET FrameWork。万岁!!!” 我期待看到 Linux 消息,即“这是 Linux。万岁!!!” 如果此代码工作正常,那么如果您确实需要执行仅受 Linux、Mac 或 Windows 支持的不同方法,您如何检查程序运行在哪个平台上。

0 投票
2 回答
366 浏览

c# - 可以基于 CPU 架构在运行时使用条件代码吗?

我正在使用.Net 4.5(预览... 4 就这个问题而言很好)。我正在做线程工作。

根据我的研究,我知道 x86 CPU 具有强大的内存模型,这意味着写入不会被重新排序。这使得释放锁是安全的。对于内存模型较弱的 Itanium CPU 而言,情况并非如此。

我了解易失性、内存障碍和执行重新排序原则。

理想情况下,如果CPU 是 Itanium,我需要在关键点插入内存屏障,但如果它是 x86,则不需要。是否可以动态地执行此操作,就像 JIT 处理的运行时编译器指令一样?

如果没有,我意识到我需要为这两个平台分别构建。在这种情况下,在没有 2 组 C# 文件的情况下执行此操作的最优雅方法是什么,而只需更改目标?

0 投票
2 回答
928 浏览

objective-c - 在编写 iOS 应用程序时评论标准?

G'Day 程序员,我来自 Java 背景,但是我刚刚开始学习C++Objective C。当我在第三方 Objective C 代码中有这么多不同的编码风格时,我很担心。但我有点进退两难。

我的困境是在编写 iOS 应用程序时是否使用#pragma 标签?它被认为是一个好习惯吗?还是程序员自己选择拥有这些指令下拉链接?

您的专业知识和行业经验会有所帮助,

谢谢


  • 我在互联网上搜索的内容主要是暗示#pragma 的作用。但是我找不到太多关于它是否被认为是好的做法的信息。