我开始用Java编程,我想知道是否#define存在与C++相当的东西.
谷歌的快速搜索说它没有,但任何人都可以告诉我,如果Java中存在类似的东西吗?我正在努力让我的代码更具可读性.
而不是myArray[0]我想能够写myArray[PROTEINS]例如.
在Objective-C它是使用静态字符串常量来定义备用API键(例如发布和调试键之间进行区分用于分析套件,像MixPanel,乱舞或Crashlytics)有时是有用的:
#if DEBUG
static NSString *const API_KEY = @"KEY_A";
#else
static NSString *const API_KEY = @"KEY_B";
#endif
Run Code Online (Sandbox Code Playgroud)
然后...
[Analytics startSession:API_KEY];
Run Code Online (Sandbox Code Playgroud)
这是如何转换为Swift的,因为Swift编译器不再使用预处理器?
我有一个结构必须填充到 64K 才能完美地适合嵌入式项目,以便它填充闪存块。所以有一个#define将结构中的元素加起来使用sizeof()并确定pad[]最后需要多大才能使总大小为64K。
例如 :
#define SIZE_OF_MY_PAD (0x10000 - (sizeof(uint16_t) + sizeof(uint8_t)*32 + ... ))
typedef struct {
uint16_t firstElement;
uint8_t secondElementArray[32];
...
uint8_t pad[SIZE_OF_MY_PAD];
};
Run Code Online (Sandbox Code Playgroud)
这在很长一段时间内一直有效,直到突然我们在某些构建配置中根本不需要垫,因为它已经正好是 64k。这会导致代码失败,因为我们的编译器(不是 GCC)不允许pad[0].
我曾尝试过各种方法来创建一个预处理价值,我可以在使用#if声明中当检测到,但它总是失败,因为虽然sizeof()是合法的#define,它不是法律#if。
有没有办法在Python中执行以下预处理程序指令?
#if DEBUG
< do some code >
#else
< do some other code >
#endif
Run Code Online (Sandbox Code Playgroud) 是否有预处理器宏让我知道ndk正在编译我的代码?我可以手动定义自己的,但如果可能,我宁愿不要.
如果我有一个布尔字段,如:
private static final boolean DEBUG = false;
在我的代码中我有如下声明:
if(DEBUG) System.err.println("err1");
Java预处理器是否只是删除了if语句和无法访问的代码?
我开始使用WiX进行自动构建以创建我的c#项目的msi,并且遇到错误"Undefined preprocessor variable'$(var.MyProject.TargetDir)'"
我使用的是最新的WiX v3.0.5419.在我的wxs文件中,我试图使用此网页上列出的预处理器变量(http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor- variables.aspx)
<Component Id="MyId" Guid="MyGuid">
<File Id="MyId" Name="MyName" KeyPath="yes"
Source="$(var.MyProject.TargetDir)\MyName.dll" />
</Component>
Run Code Online (Sandbox Code Playgroud)
我已将MyProject的引用添加到.wixproj中,如果我在记事本中打开它,我可以看到引用.
<ItemGroup>
<ProjectReference Include="..\MyProject.csproj">
<Name>MyProject</Name>
<Project>{guid}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这是我用来创建msi的nant构建脚本.也许是因为.wixproj知道构建中没有使用的项目引用?
<exec basedir="${tools.wix}" managed="true" program="candle.exe">
<arg line='-out "${tools.wix.objfile}"' />
<arg value="../MySetup.wxs" />
</exec>
Run Code Online (Sandbox Code Playgroud)
请问有人能开导我吗?
我想要的不是标准的C预处理器,而是可以从某个地方接受的变体 - 可能是命令行通过-DNAME1和-UNAME2选项 - 定义了哪些宏的规范,然后消除了死码.
通过一些例子可能更容易理解我所追求的内容:
#ifdef NAME1
#define ALBUQUERQUE "ambidextrous"
#else
#define PHANTASMAGORIA "ghostly"
#endif
Run Code Online (Sandbox Code Playgroud)
如果命令是使用'-DNAME1'运行的,则输出将为:
#define ALBUQUERQUE "ambidextrous"
Run Code Online (Sandbox Code Playgroud)
如果命令是使用'-UNAME1'运行的,则输出将为:
#define PHANTASMAGORIA "ghostly"
Run Code Online (Sandbox Code Playgroud)
如果命令是在没有选项的情况下运行的,则输出将与输入相同.
这是一个简单的例子 - 我希望代码也可以处理更复杂的情况.
用现实世界但仍然简单的例子来说明:
#ifdef USE_VOID
#ifdef PLATFORM1
#define VOID void
#else
#undef VOID
typedef void VOID;
#endif /* PLATFORM1 */
typedef void * VOIDPTR;
#else
typedef mint VOID;
typedef char * VOIDPTR;
#endif /* USE_VOID */
Run Code Online (Sandbox Code Playgroud)
我想运行命令-DUSE_VOID -UPLATFORM1并获取输出:
#undef VOID
typedef void VOID;
typedef void * VOIDPTR;
Run Code Online (Sandbox Code Playgroud)
另一个例子:
#ifndef DOUBLEPAD
#if …Run Code Online (Sandbox Code Playgroud) 我有几个节点,CCK字段和视图主题的.tpl.php文件.这些模板文件中有很多逻辑可以移动,剥离链接,创建新链接等等.我知道这是糟糕的开发而不是"Drupal Way".
如果我理解正确,"Drupal Way"是在template.php文件中使用预处理器函数来操作变量并添加新变量.关于这个问题:
content-field-field_transmission_make_model.tpl,我该如何命名预处理器函数?可能这很简单,但我找不到为Xcode 6中的目标定义预处理器宏的方法.
preprocessor ×10
c ×2
java ×2
macros ×2
xcode ×2
android ×1
android-ndk ×1
c++ ×1
directive ×1
drupal ×1
drupal-6 ×1
equivalent ×1
optimization ×1
python ×1
swift ×1
target ×1
votive ×1
wix ×1
wix3 ×1