我是一名长期从事Java的程序员.我正在Eclipse中开发一个Java Blackberry项目.问题 - 有没有办法在项目中引入不同的配置集,然后基于这些编译稍微不同的代码?
在Visual Studio中,我们有项目配置和#ifdef; 我知道Java中没有#ifdef,但可能是文件级别的东西?
有时我会@cc_on在JavaScript中看到.这是什么意思?
假设您有以下 C++ 类的定义:
class A {
// Methods
#ifdef X
// Hidden methods in some translation units
#endif
};
Run Code Online (Sandbox Code Playgroud)
这是否违反了班级的一个定义规则?有哪些相关危害?我怀疑如果使用成员函数指针或虚函数,这很可能会中断。否则使用安全吗?
我在 Objective C++ 的上下文中考虑它。头文件包含在纯 C++ 和 Objective C++ 翻译单元中。我的想法是使用 OBJC 宏保护具有 Objective-C 类型的方法。否则,我必须对标头中的所有 Objective-C 类型使用 void 指针,但这样我就失去了强类型,并且必须在整个代码中添加丑陋的静态强制转换。
c++ objective-c conditional-compilation objective-c++ one-definition-rule
假设我在 中定义了以下功能Cargo.toml:
[features]
my_feature = []
Run Code Online (Sandbox Code Playgroud)
以下代码位于src/lib.rs:
[features]
my_feature = []
Run Code Online (Sandbox Code Playgroud)
我如何强制功能字符串与显式定义和隐式可用功能的列表相匹配,以便Cargo.toml避免例如拼写错误?
我可以回想一下,在使用MFC时,您可以通过检查_MFC_VER宏来支持多个版本的MFC框架.
我现在正在使用.NET 4做一些事情,并希望在几个地方使用Tuple,但仍然保持其他一切3.5兼容.
我想做的事情如下:
#if DOTNET4
public Tuple<TSource, TResult> SomeMethod<TSource, TResult>(){...}
#else
public KeyValuePair<TSource, TResult> SomeMethod<TSource, TResult>(){...}
#endif
Run Code Online (Sandbox Code Playgroud) 我目前正在忙于一个项目,我需要使用外部附件来阅读Mifare 1k标签.
附件提供了一个SDK,用(Objective?)C++编写,我按照提供的指令将XCode设置为"Compile sources as:Objective-C++",并在"Other linkers flags"中添加"-Obj-C++".
SDK编译好了,但麻烦的是我已经在项目中使用了几个库(例如ASIHTTPRequest,JSONKit,...),并且因为这些库中的那些新设置而导致编译问题.如果我切换回以前的设置,我会在阅读器的SDK中遇到编译问题
问题是:有没有办法只从SDK中编译类作为C++,而项目的其余部分作为objective-c?
编辑: SDK文件仅包含.h(和链接库)
谢谢你的帮助,迈克
xcode compilation objective-c conditional-compilation objective-c++
我正在努力让Log4D在Delphi XE4中工作,并且因为在uses子句中找不到Contnrs而得到一些编译错误,除非我把它移到了它定义的ifdef之外.
{$IFDEF DELPHI5_UP}
Contnrs,
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
一些调查发现ifdef是在一个包含的文件Defines.inc中定义的,它有一个块用于每个"支持"的delphi版本,它会停止几个版本:
例如:
{$IFDEF VER170} { Delphi 2005 }
{$DEFINE DELPHI9}
{$DEFINE DELPHI4_UP}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$ENDIF}
{$IFDEF VER180} { Delphi 2006 }
{$DEFINE DELPHI10}
{$DEFINE DELPHI4_UP}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
Run Code Online (Sandbox Code Playgroud)
因此,虽然继续复制并粘贴用于Delphi 2006的ifdef并创建一个Delphi XE4块也很容易......但这似乎是一个不优雅的解决方案.这绝对不是未来的证明......你现在必须更新这个文件的每个新版本,因此Delphi 4中没有的一些代码不会让别人的15岁以上的遗留代码爆炸.
所以我想知道是否有更好的方法来进行条件编译,以便在编译该行时确实只检查是否有"Delphi 5或更高版本",而不是这种格式需要更新每个新版本的delphi .
我目前正在开发一个VBA代码生成器/注入器,它通过使用VBA可扩展性将VBA功能添加到Excel工作簿.一切正常.
但是,注入的原始代码使用条件编译,引用一些全局条件编译参数:

有没有什么办法可以编程修改/添加VBA项目的条件编译参数?
我检查了VBProject的所有属性但找不到任何东西.
有可能做这样的事情
#ifdef SOMETHING
#define foo //
#else
#define foo MyFunction
#endif
Run Code Online (Sandbox Code Playgroud)
这个想法是,如果定义了SOMETHING,那么对foo(...)的调用将成为注释(或者不会被评估或编译的内容),否则它将成为对MyFunction的调用.
我见过__noop,但我不相信我可以使用它.
编辑(S):
我不认为我真的可以在这里使用宏,因为MyFunction采用可变数量的参数.
此外,我想这样做,所以参数不被评估!(所以做一些像评论我的MyFunction的主体并没有真正给我我需要的东西,因为参数仍将被评估)
c++ ×2
objective-c ×2
.net ×1
.net-4.0 ×1
c ×1
c# ×1
compilation ×1
delphi ×1
eclipse ×1
excel-vba ×1
java ×1
javascript ×1
macros ×1
properties ×1
python ×1
rust ×1
rust-cargo ×1
vba ×1
vbe ×1
xcode ×1