#ifdef doesn't work. But why?
CGFloat maxScale;
if ( [[UIScreen mainScreen] respondsToSelector: @selector (scale)] == YES )
{
NSLog (@"case1");
#define GLOBAL1
}
else
{
NSLog (@"case2");
#undef GLOBAL1
}
#ifdef GLOBAL1
NSLog (@"first");
maxScale = 1.0 / [[UIScreen mainScreen] scale];
#else
NSLog (@"second");
maxScale = 1.0;
#endif
#undef GLOBAL1
Run Code Online (Sandbox Code Playgroud)
我的日志:案例1,第二个。但首先必须是case1。
我想知道这样的事情是否可行
fn main() {
#[cfg(foo)] {
println!("using foo config");
}
}
Run Code Online (Sandbox Code Playgroud)
上下文是一些仅使用单元测试无法充分测试的代码.我经常要运行一个显示信息的"demo"cfg.我正在寻找手动注释/删除某些代码部分的替代方法.
Sphinx知道条件内容的两个指令:
他们之间有什么区别?
假设我有一个使用条件编译的 C++ 类:
hpp
namespace NS{
class C {
public:
C(void);
~C(void);
int func( int arg1 );
private:
int memberVar;
}
Run Code Online (Sandbox Code Playgroud)
C.cpp:
#include "C.hpp"
namespace NS{
C::C( void ){ memberVar = 0; }
C::~C( void ) {}
int C::func( int arg1 ){
int retval = 0;
memberVar = arg1;
#ifdef DEV_BUILD
retval = memberVar;
printf( "memberVar was set.\n" );
#endif
return retval;
}
}
Run Code Online (Sandbox Code Playgroud)
(这是一个简化的例子;想象一下这个类C有几百行长,它的一些函数使用条件编译,每个函数都使用相同的条件:#ifdef DEV_BUILD。应用程序是一个嵌入式系统应用程序,条件被使用区分测试硬件和生产硬件,它们有一些区别)
我被建议改为在单独的 .cpp 文件中实现 funcs ......但我有点不知道最好的方法是什么。
我的第一个冲动是创建 C_dev.cpp 和 C_prod.cpp,C::func()在每个中实现不同,并因此编辑 C.cpp: …
我想在我的程序中进行条件编译.我知道如果你声明一个public static final boolean,编译器将忽略未遍历的分支.在构建程序之前,是否可以让ant目标更改变量?
例如,如果我有:
final public static boolean windows = false;
我想要两个蚂蚁目标:Windows和Mac.我希望命令
ant windows
将布尔值更改为true,同时
ant mac
保留变量.
谢谢.
我正在使用gfortran编译FORTRAN 77,并希望通过使用预处理器指令#ifdef来获得DEBUG构建选项.但是,当我使用它们时,我得到编译时警告"非法预处理程序指令".是否可以在不偏离标准工具链的情况下使用此功能?
在linux make file中:
我只想在编译成功的情况下运行输出程序.
有没有办法做到这一点?
我有这个条件编译语句,它评估浏览器是否IE:
ie = /*@cc_on!@*/false;
if (ie) {
//do IE specific stuff..
}
Run Code Online (Sandbox Code Playgroud)
我需要在JSNI中的GWT中使用它.但是当我这样做时:
public native void JS() /*-{
ie = /*@cc_on!@*/false;
}-*/;
Run Code Online (Sandbox Code Playgroud)
我在该行上收到错误,如语法错误,}预期.我试过了,eval但仍然存在错误.我该如何解决?
我正在尝试设置一个makefile来编译一个相当迟缓的程序的多个段.为了做到这一点,我希望Makefile能够一次传递MULTIPLE调试标志所以我可以一起测试多个不同的函数集.
所以在我的Makefile中:
debug:
gcc -Wall -O -o my_malloc main.c -D experimental leak <-- SECOND FLAG
./my_malloc
Run Code Online (Sandbox Code Playgroud)
在我的C代码中我想做:
#ifdef experimental
printf("MALLOC PROGRAM IN DEBUGGING MODE\n");
#endif
//executing both conditionals at once in one line.
#ifdef leak
puts("TESTING LEAK DETECTION");
#endif
Run Code Online (Sandbox Code Playgroud) 我在golang中运行一些测试,我想避免运行慢速,例如这个使用bcrypt所以它很慢:
// +build slow
package services
import (
"testing"
"testing/quick"
)
// using bcrypt takes too much time, reduce the number of iterations.
var config = &quick.Config{MaxCount: 20}
func TestSignaturesAreSame(t *testing.T) {
same := func(simple string) bool {
result, err := Encrypt(simple)
success := err == nil && ComparePassWithHash(simple, result)
return success
}
if err := quick.Check(same, config); err != nil {
t.Error(err)
}
}
Run Code Online (Sandbox Code Playgroud)
为了避免在每次迭代中运行它,我都设置了// +build slow标志.这应该只在执行时运行,go test -tags slow但不幸的是它每次都在运行(-v标志显示它正在运行).
知道什么是错的吗?