有没有办法在编译期间显示的代码中嵌入消息,当编译该代码时?消息本质上是诊断性的,不应修改或中止编译过程.
(免责声明:我知道这个问题的答案.我没有在Stack Overflow上找到它,我认为这对知识库来说是一个有用的补充.)
我试图在同一个XCode项目中拥有我的iPhone应用程序的2个版本.代码库几乎相同,我需要有不同的行为,我决定使用预处理器的条件和${TARGET_NAME}标签.
我已经设置OTHER_CFLAGS为包含" -DTARGET_NAME=${TARGET_NAME}".
然后在我的代码中我试着做
#if TARGET_NAME == myApp
NSLog(@"pro");
#elif TARGET_NAME == myAppLite
NSLog(@"lite");
#endif
Run Code Online (Sandbox Code Playgroud)
不幸的是我总是打印出"精简版",因为TARGET_NAME == myApp它始终是真的:自TARGET_NAME定义之后.我不能为我的生活弄清楚如何评估这个字符串比较.任何的想法?
提前致谢
有人知道m4除autoconf之外的任何用途(最好是在ac或c ++环境中),这不仅仅是一个学术上的延伸,因为它有助于解决一个问题,否则(例如使用"标准"预处理器)难以解决.
我问这个是因为我正在考虑用c ++做一个项目的方法,我希望通过使用脚本,预处理器,whatevers来减少或减少冗余.
根据各种消息来源(例如,与Kevlin Henney的SE电台节目,如果我没记错的话),"C with classes"是用预处理器技术实现的(输出然后被输入到C编译器),而C++一直是用编译器实现(刚好在早期就吐出了C).这似乎引起了一些混乱,所以我想知道:
预处理器和编译器之间的边界究竟在哪里?你什么时候调用一个实现语言"预处理器"的软件,什么时候称它为"编译器"?
那么,"编译语言"是一个既定术语?如果是这样,究竟是什么意思?
我正在寻找一种解决方案,只在Javascript中使用与编译语言中的#ifndef完全相同的函数定义一次函数.我发现了一些应该模仿这个功能的库,但它们没有用.
我正在使用MVC 3 Razor并定义了一些html助手,它们确实将用户控件放在页面上.
每个控件都有一组javascript函数,用于定义该控件的特定功能,因此这里存在一个问题:当在单个页面上多次调用帮助程序时,函数会多次定义.
我希望找到一种方法来保持在帮助程序中定义的少量javascript,而不必将这些小帮助程序中的每一个的所有javascript划分到一个单独的文件中.
样品:
@helper CmsImage(int id)
{
var Html = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html;
<text>
<input type="button" class="editor_function" style="display: none;" onclick="editImage(@id); return false;" />
<script>
function editImage(id) {
$('#alt_text' + id).attr('value', $('#' + id).attr('alt'));
$('#image_url' + id).attr('value', $('#' + id).attr('src'));
}
function saveImage(button, id) {
$(button).parent().parent().removeClass('color-yellow').addClass('color-red');
$(button).parent().siblings('div.widget-content').html('<img alt="' + $('#alt_text' + id).val() + '" src="' + $('#image_url' + id).val() + '" id="' + id + '" />');
}
#endif
</script>
Image Url:
<input type="text" id="image_url@{id.ToString();}" /><br />
Alt Text: …Run Code Online (Sandbox Code Playgroud) 在尝试查看禁用的代码时遇到奇怪的代码着色问题.
对于使用#ifdef或#ifndef语句禁用的代码块,我得到灰色/白色背景:

但是,当代码启用时,事情就可以了:

我在哪里可以在属性菜单中找到此颜色属性?我找不到任何关于禁用代码的信息,它不在任何预处理器颜色编码菜单下.
是否可以在bash脚本中的注释中扩展变量?
我想写一个脚本来提供给SGE.该qsub语法允许我将其他参数传递到使用bash脚本与开始内部线网格引擎#$.例如,
#$ -q all.q
#$ -S /bin/bash
#$ -V
#$ -m beas
#$ -o run_20120103.out
Run Code Online (Sandbox Code Playgroud)
我想要的是,-o参数是动态设置为变量的$1.所以我会天真地写
#$ -o run_${1}.out
Run Code Online (Sandbox Code Playgroud)
但是,由于行以a开头#,bash忽略它并且变量$1未展开.
有任何想法吗?一些bash预处理器?还有其他方法吗?
编辑我只是选择了$1一个例子.它也可以$FOO或$BAR.
我在C代码解析器上工作Perl.
目前我需要预处理代码.预处理的实现似乎需要做很多工作,所以我正在寻找一个允许预处理文件的脚本或库.
我发现了以下可能性:
这两个都需要cpp我在Windows机器上没有的.还有其他选择吗?
在许多项目中,这种控制结构是可读性的理想选择:
forCount( 40 )
{
// this block is run 40 times
}
Run Code Online (Sandbox Code Playgroud)
你可以 在objective-C中做到这一点.
鉴于Swift 对宏的方法与 objective-c的方法截然不同,
有没有办法forCount(40)在Swift项目中创建这样的控制结构?
Swift中的一些类似概念:
for _ in 1...40
{ // this block is run 40 times }
Run Code Online (Sandbox Code Playgroud)
40.times
{ // this block is run 40 times }
Run Code Online (Sandbox Code Playgroud) 我正在使用返回类似以下内容的API:
{'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}
Run Code Online (Sandbox Code Playgroud)
我想用棉花糖去除它,只获得名称和开始日期,所以期望的结果如下:
{'name': 'foo', 'date': '2016-06-19'}
Run Code Online (Sandbox Code Playgroud)
但我没有找到任何方法来获取日期,这是我尝试过的:
from marshmallow import Schema, fields, pprint
event = {'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}
class EventSchema(Schema):
name = fields.Str()
date = fields.Str(load_from='start.date')
schema = EventSchema()
result = schema.load(event)
pprint(result.data)
Run Code Online (Sandbox Code Playgroud) preprocessor ×10
c ×2
c++ ×2
autoconf ×1
bash ×1
color-scheme ×1
directive ×1
eclipse ×1
iphone ×1
javascript ×1
m4 ×1
macros ×1
marshmallow ×1
messages ×1
perl ×1
python ×1
swift ×1
terminology ×1
visual-c++ ×1
xcode ×1