标签: compiler-directives

VB.net中的#warning指令

我知道vb.net中不存在#warning指令......有什么类似的吗?
我希望能够在编译时抛出消息(警告).

.net vb.net preprocessor compiler-directives

8
推荐指数
1
解决办法
2016
查看次数

C#编译器指令

我正在查看一些C#代码,并且遇到了以下声明:

#if DEBUG
    // Do something here
#else
    // Do something else
#endif
Run Code Online (Sandbox Code Playgroud)

我假设DEBUG将在某处定义如下:

#define DEBUG
Run Code Online (Sandbox Code Playgroud)

但我无法找到这样的定义,尽管代码似乎表现得像设置的那样.DEBUG是一个特例,如果是这样,它是如何设置/取消设置的?

c# compiler-directives

8
推荐指数
1
解决办法
5823
查看次数

适用于iPhone模拟器的MonoTouch编译器指令

有没有人知道我在MonoTouch中使用的编译器指令,看看我是否在iPhone模拟器中运行?无法在任何地方找到任何信息.

谢谢!

c# compiler-directives xamarin.ios

8
推荐指数
1
解决办法
712
查看次数

{$ WARN SYMBOL_PLATFORM OFF}不会关闭警告

我有这段代码:

INTERFACE

{$WARN SYMBOL_PLATFORM OFF}
USES
   Winapi.Windows, etc, {$IFDEF MSWINDOWS}Vcl.FileCtrl, {$ENDIF} System.IniFiles;
{$WARN SYMBOL_PLATFORM ON}
Run Code Online (Sandbox Code Playgroud)

编译器显示:

[dcc32警告] W1005单元'Vcl.FileCtrl'特定于平台

即使{$ WARN SYMBOL_PLATFORM OFF}在那里.
为什么?

delphi cross-platform compiler-directives delphi-xe7

8
推荐指数
1
解决办法
1963
查看次数

#Define Compiler Directive in C#

In C, I could declare a compiler directive as follows:

#define MY_NUMBER 10
Run Code Online (Sandbox Code Playgroud)

However, in C#, I only appear to be able to do this:

#define MY_NUMBER
Run Code Online (Sandbox Code Playgroud)

Which is obviously useless in this case.

Is this correct, or am I doing something wrong? If not, can anyone suggest a way of doing this, either at namespace or solution level? I thought of maybe creating a static class, but that seems to be overkill for one value.

c# compiler-directives

7
推荐指数
2
解决办法
5151
查看次数

是否有可能确保复制省略?

复制省略是一种简洁的优化技术,在某些情况下,依赖复制省略实际上比"手动"传递参考更快.

因此,我们假设您已经确定了一个关键代码路径,您依赖于编译器为代码路径执行复制省略以获得最佳性能的事实.

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

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

(我正在考虑远远类似于Visual C++的东西,__forceinline如果标记的函数没有被编译器内联,则会产生警告.)

c++ diagnostics compiler-directives copy-elision

7
推荐指数
1
解决办法
650
查看次数

{$ C PRELOAD}指令的含义是什么?

我发现在Controls.pas(以及其他单位)中声明了这个指令,我很高兴知道这是什么意思.

{$C PRELOAD}
Run Code Online (Sandbox Code Playgroud)

据我所知,$ C表示断言控制,但PRELOAD关键字是什么?这是"在预加载时断言我"吗?

我在Delphi 2009中发现了这一点

谢谢

delphi directive compiler-directives

7
推荐指数
2
解决办法
635
查看次数

如何在编译时告诉项目是程序还是库?

我正在尝试知道项目是否是一个库,在阅读帮助后我写了这段代码不起作用:

{$IF DEFINED(LIBPREFIX)}
    {$DEFINE PROJECT_IS_EXECUTABLE}
    {$UNDEF PROJECT_IS_LIBRARY}
{$ELSE}
    {$DEFINE PROJECT_IS_EXECUTABLE}
    {$UNDEF PROJECT_IS_LIBRARY}
{$IFEND}
Run Code Online (Sandbox Code Playgroud)

我试过DEFINED,DECLARED和

{$IF (LIBPREFIX = '')}
Run Code Online (Sandbox Code Playgroud)

每次尝试总是为DLL和程序返回相同的内容.如何仅使用内置编译器指令执行此操作?

编辑

我的目的是从"PE文件"中删除额外的信息.

我直接在.dpr项目文件中进行,所以不管其他单元是如何编译的,但我不能在DLL项目中做同样的事情.

因此我正在寻找一种方法来阻止它在DLL项目中.

这就是我解决这个问题的方法,我将这个指令添加到我的.dpr程序中:

  {$DEFINE STRIPE_PE_INFO}
  {$DEFINE STRIPE_RTTI}
  {$I DDC_STRIP.inc}
Run Code Online (Sandbox Code Playgroud)

并且DDC_STRIP.inc具有所有逻辑.

delphi compiler-directives

7
推荐指数
2
解决办法
761
查看次数

Monotouch编译器指令,如果调试

在我的MonoTouch应用程序中,如何在调试模式下输入#compiler指令以包含代码?

c# compiler-directives xamarin.ios

6
推荐指数
1
解决办法
1158
查看次数

在C#中删除预编译器指令

我被要求保留一些不像遗产一样的代码,并且它充满了编译器指令,使它几乎不可读,几乎可维护.例证:

#if CONDITION_1
        protected override void BeforeAdd(LogEntity entity)
#else
        protected override void BeforeAdd(AbstractBusinessEntity entity)
#endif
        {
#if CONDITON_1
            entity.DateTimeInsert = DateTime.Now;
#else
            ((LogEntity) entity).DateTimeInsert = DateTime.Now;
#endif
            base.BeforeAdd(entity);
        }
Run Code Online (Sandbox Code Playgroud)

using 指令甚至更漂亮:

#if CONDITION_1
using CompanyName.Configuration;
#endif

#if CONDITION_2||CONDITION_1
using CompanyName.Data;
using CompanyName.Data.SqlBuilders;
#else
using CompanyName.Legacy.Database;
using CompanyName.Legacy.Database.SQLBuilders;
using CompanyName.Legacy.Database.SQLBuilders.parameterTypes;
#endif
Run Code Online (Sandbox Code Playgroud)

我以为我会ConditionalAttribute放手一搏,但在这种情况下这不会奏效

有什么方法可以解决这个编译器指令的噩梦吗?

代码是针对编译的.NET 3.5.

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

protected virtual void BeforeAdd(TEntity entity) {}
Run Code Online (Sandbox Code Playgroud)

要么

protected virtual void BeforeAdd(AbstractBusinessEntity entity) {}
Run Code Online (Sandbox Code Playgroud)

此代码从过去一段时间创建的一组库中获取其依赖关系,并且从那时起一直在"升级".他们现在有4个不同版本的库,其中包含冲突的命名空间和不同的实现.所有这些都与使用(非常)旧版本的应用程序的"向后兼容性"有关.


结论

我最终选择了@Oded的答案,因为它作为一种通用方法最有意义( …

c# compiler-directives .net-3.5 c#-3.0

6
推荐指数
1
解决办法
354
查看次数