标签: compiler-directives

C#if/then指令用于debug和release

在解决方案属性中,我将Configuration设置为"release",用​​于我唯一的项目.

在主程序的开头,我有这个代码,它显示"Mode = Debug".我也在最顶端有这两行:

#define DEBUG 
#define RELEASE
Run Code Online (Sandbox Code Playgroud)

我在测试正确的变量吗?

#if (DEBUG)
            Console.WriteLine("Mode=Debug"); 
#elif (RELEASE)
            Console.WriteLine("Mode=Release"); 
#endif
Run Code Online (Sandbox Code Playgroud)

我的目标是根据调试版本和发布模式为变量设置不同的默认值.

c# debugging release compiler-directives

401
推荐指数
12
解决办法
32万
查看次数

在Simulator中运行时的条件编译,而不是在设备上运行

有没有一个编译器指令,我可以用它来编译一个不同的代码行来定位模拟器而不是我的设备.就像是:

# IF SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
# ELSE
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
# END
Run Code Online (Sandbox Code Playgroud)

编辑

直接链接到文档.

iphone objective-c compiler-directives ios ios-simulator

31
推荐指数
3
解决办法
5771
查看次数

如何在C#中设置项目范围的#define

我在一个项目中有几个类,它们只需要在应用程序的某些版本中,这些版本当前还没有准备好发布或调试.

为了防止这些类被使用,我想围绕它们:

#if USE_MYCLASS
// Code here...
#endif
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道如何设置项目范围#define.

Visual Studio中是否有功能来设置项目范围的定义.

如果有,虽然我现在不需要它,是否有设置解决方案范围定义的功能?

如果没有这样的功能(看作C#没有包含文件,我想这是可能的),是否有任何方法或插件在不使用命令行编译器和/ D的情况下执行此功能?

c# compiler-directives visual-studio

20
推荐指数
1
解决办法
1万
查看次数

Delphi #IF(DEBUG)相当于?

是否有Delphi等效的C##if(DEBUG)编译器指令?

delphi compiler-directives

17
推荐指数
3
解决办法
2万
查看次数

如何根据编译符号有条件地引用DLL?

Visual Studio 2013.

我有一个外部DLL,我在csproj文件中引用如下:

  <ItemGroup>
    <Reference Include="NameOfDll">
      <HintPath>Path\To\Dll\NameOfDll.dll</HintPath>
    </Reference>
Run Code Online (Sandbox Code Playgroud)

我希望这个引用在编译器符号存在时起作用,而在编译器符号不存在时不起作用.(为了解决下面的第一条评论,假设编译器符号被称为Fred.)

这个问题[ 条件参考 ]让我觉得我可以在上面显示的Reference元素中添加一个名为Condition的属性,但我无法确定哪个值赋予该属性以实现我想要的效果.

我很高兴能在VS UI中找到一种方法,但我会采取任何方法.

c# compiler-directives csproj visual-studio-2013

14
推荐指数
1
解决办法
4557
查看次数

如何在.csproj文件中使用MSBuild条件测试编译器指令?

我对.csproj文件中的函数和条件完全陌生,所以我们非常感谢所有的帮助.

我想要做的是检查当前配置中的特定编译器指令.一个例子如下:

<Choose>
    <When Condition= [current configuration has CONST-1 compiler constant defined] >
        ...
    </When>
    <When Condition= [current configuration has CONST-2 compiler constant defined] >
        ...
    </When>
</Choose>
Run Code Online (Sandbox Code Playgroud)

我不知道这是否可能.如果有更好的方法来做我要求的事情让我也知道.无论哪种方式,我想测试一个独立于配置的条件.

编辑

我真正想要的是一个我可以轻松编辑的值,最好是在Visual Studio中编辑,我也可以检查一下configuraiton.我考虑过编译器常量,因为您可以在VS的Project Properties中轻松更改它们.

c# msbuild compiler-directives csproj

13
推荐指数
2
解决办法
5198
查看次数

如何暂时禁用"返回值可能未定义"警告?

我想在我的代码中禁用特定警告(W1035),因为我认为编译器对此警告是错误的:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;
Run Code Online (Sandbox Code Playgroud)

因为Abort投掷,结果不可能是未定义的EAbort.

我试过了:

  • {$WARN 1035 Off}:显然这仅适用于某些特定错误(请参阅文档)
  • {$W-1035}:什么都不做

我知道我可以在项目选项中全局关闭警告,或使用{$WARNINGS OFF},但这不是这里的意图.

编辑:我现在已经将QC作为#89744了.

delphi compiler-directives delphi-2007 suppress-warnings

12
推荐指数
2
解决办法
524
查看次数

我在哪里定义用{$ IFDEF}测试的符号?

当我在代码中使用Delphi指令时,例如:

{$IFDEF something}
.
.
.
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

我在哪里为项目分配"某事"这个词?我在一些地方试过项目选项,但它没有用.猜猜我找不到正确的.

delphi compiler-directives delphi-2009

12
推荐指数
5
解决办法
9237
查看次数

编译器指令 - Delphi版本

我有一个我在Delphi 7中写过的单元,并且刚刚获得了转换为Delphi XE(Unicode)的乐趣(痛苦).

在遇到麻烦后,该单元工作正常,我现在正在尝试使该单元与不同的Delphi版本兼容,如果我需要在更新其他代码时将IDE切换回Delphi 7.

我只有Delphi 7和Delphi XE,但从我收集的Delphi 1编写的代码到Delphi 2007将编译,但Delphi 2009及以上的代码将是Unicode.

...无论如何,在单元中我将非unicode和unicode分开,如下所示:

{$IFDEF VER150} //Delphi 7
// code
{$ELSE IFDEF VER220} //Delphi XE
// code
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

如何修改编译器指令以使规则适用于多个版本?例如:

{$IFDEF VER80,  //D1
        VER90,  //D2
        VER100, //D3
        VER120, //D4
        VER130, //D5
        VER140, //D6
        VER150, //D7}
Run Code Online (Sandbox Code Playgroud)

如果我分发源或.dcu单元,这将覆盖所有Delphi版本.

谢谢.

delphi compiler-construction compiler-directives

11
推荐指数
2
解决办法
3092
查看次数

Perl的词法范围的pragma是如何实现的?

编译指示一样autodie,根据文档,是词法范围的.

{
use autodie;
  ..
  ..
}
# Can die here
Run Code Online (Sandbox Code Playgroud)

这适用于所有加载的模块use吗?据我所知,use几乎相同:

BEGIN {
  require autodie;
  autodie->import(LIST);
}
Run Code Online (Sandbox Code Playgroud)

BEGIN在编译时发生,并且require不是词法范围.那怎么autodie知道它的范围呢?

perl scope internals compiler-directives lexical-scope

8
推荐指数
2
解决办法
305
查看次数