目前我们的.net代码不是特定于处理器的,但它依赖于库(Oracle/ODP.Net).我们找到了一个直接编辑csproj文件的解决方案,并根据我们选择的构建配置将引用放入带有Condition子句的项目组中.我们有32位调试/发布和64位调试/发布,并且在构建该配置时正确的程序集是引用.
这在构建时或多或少有效,但它会在Visual Studio(2008)中引起各种怪异.最终结果是相同的组件在引用下显示四次,三个具有黄色感叹号.它还会产生一些我无法摆脱的76个警告.我们试图针对0警告,因为我们想知道什么时候出现新警告,所以这有点问题.
是否有人知道条件引用的解决方案允许它看起来像一个引用(它确实是这样)并且在构建时没有填写我的警告?
我们需要在类库项目中定义条件编译符号.这不应该在源代码管理中检查(它不适用于所有开发人员),因此应该在.csproj或app.config文件以外的其他位置定义它.怎么能实现这一目标?
我的C项目使用预处理程序指令来激活/停用某些功能.由于几天前发生的变化导致一些较不常见的配置不再编译,这并不罕见#ifdef.
我们使用脚本来编译最常见的配置,但我正在寻找一种工具来确保编译所有内容(在我们的情况下测试不是问题,我们只想检测ASAP没有停止编译).通常ifdefs/ifndefs是独立的,因此通常每个模块只需编译两次(所有符号都定义,都是未定义的).但有时ifdefs是嵌套的,所以这些模块必须编译更多次.
您知道搜索所有ifdef/ifndef(也是嵌套的)的任何工具,并给出了一个模块必须编译多少次(每个模块中要定义的预处理器符号集)以确保每个源代码行是由编译器分析的?
我知道如果我将代码标记为DEBUG代码,它将不会在RELEASE模式下运行,但它是否仍然被编译成程序集?我只想确保我的装配不会被额外的方法臃肿.
[Conditional(DEBUG)]
private void DoSomeLocalDebugging()
{
//debugging
}
Run Code Online (Sandbox Code Playgroud) 例:
#ifdef FREE_VERSION
tf.text = @"Free";
NSLog(@"FREE VERSION");
#else
tf.text = @"Paid";
NSLog(@"PAID VERSION");
#endif
Run Code Online (Sandbox Code Playgroud)
第一部分在Xcode中看起来很好.
tf.text = @"Free";
NSLog(@"FREE VERSION");
Run Code Online (Sandbox Code Playgroud)
语法突出显示.但是,第二部分不是:
tf.text = @"付费";
NSLog(@"PAID VERSION");
有没有像"不要在条件cimpilation代码的#else部分中进行语法高亮"这样的设置?
在C++ 11标准的细化过程中,似乎is_trivially_destructible被认为是比has_trivial_destructor更好/更一致的名称.
这是一个相对较新的开发,因为我的g ++ 4.7.1仍然使用旧名称,并且已修复为符合4.8的标准:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52702
我一直懒得使用一个#if有利于我所使用的编译器:
#if TRIVIAL_DESTRUCTOR_TYPE_TRAIT_MATCHES_STANDARD
template<class T>
using is_trivially_destructible = std::is_trivially_destructible<T>;
#else
template<class T>
using is_trivially_destructible = std::has_trivial_destructor<T>;
#endif
Run Code Online (Sandbox Code Playgroud)
...但现在我正在尝试与4.8用户和其他编译器共享标准的源代码.是否有更好的技巧可以使情况检测更"自动"而不需要#define?
我理解使用NETFX_CORE指令,如下所示:
#if NETFX_CORE
// Windows 8
#else
// Windows Phone 8
#endif
Run Code Online (Sandbox Code Playgroud)
更多信息:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj714084(v=vs.105).aspx
但有没有针对Windows Phone 8的指令?
如果定义了两个宏中的任何一个,我想要包含一段代码
#ifdef MACRO1 || MACRO2
void foo()
{
}
#endif
Run Code Online (Sandbox Code Playgroud)
我如何在C中完成此操作?
假设没有定义MACRO,这些是等价的
#ifdef MACRO
Not valid C or C++ code
#endif
/*
Not valid C or C++ code
*/
Run Code Online (Sandbox Code Playgroud)
在GCC 4.7.1中,它似乎是等效的,但是有更多的预处理器吗?
我遇到了一些示例代码,如下所示:
#ifdef WIN32
...
#elif WIN64
...
#endif
Run Code Online (Sandbox Code Playgroud)
在一个#ifdef块中,它实际上是合法使用#elif的意思#elif defined?