标签: macros

真实使用X-Macros

我刚学会了X-Macros.您看过X-Macros的实际用途?他们什么时候成为工作的合适工具?

c macros c-preprocessor x-macros

67
推荐指数
5
解决办法
2万
查看次数

如何使用Swift中的Objective-C#define

我正在迁移一个UIViewController类,用Swift训练一下.我通过桥接头成功使用Objective-C代码,但我需要导入包含#define指令的常量文件.

我在使用Swift与Cocoa和Objective-C(简单宏)中看到了以下内容:

简单的宏

在通常使用该#define指令在C和Objective-C中定义基本常量的地方,在Swift中使用全局常量代替.例如,常量定义#define FADE_ANIMATION_DURATION 0.35可以在Swift中更好地表达let FADE_ANIMATION_DURATION = 0.35.因为简单的类似常量的宏直接映射到Swift全局变量,所以编译器会自动导入在C和Objective-C源文件中定义的简单宏.

所以,似乎有可能.我已经将包含我的常量的文件导入到桥接头中,但是我的.swift文件没有可见性,无法解析.

我该怎么做才能让我的常量对Swift可见?

更新:

它似乎与NSString常量一起使用,但不适用于布尔值:

#define kSTRING_CONSTANT @"a_string_constant" // resolved from swift
#define kBOOL_CONSTANT YES // unresolved from swift
Run Code Online (Sandbox Code Playgroud)

macros objective-c swift

67
推荐指数
3
解决办法
9万
查看次数

如何在gcc命令行中定义字符串文字?

在gcc命令行中,我想定义一个字符串-Dname=Mary,然后在我要printf("%s", name);打印的源代码中Mary.
我怎么能这样做?

c c++ macros command-line gcc

66
推荐指数
4
解决办法
5万
查看次数

为什么这个宏被替换为20而不是10?

1. #define NUM 10
2. #define FOO NUM
3. #undef NUM
4. #define NUM 20
5. 
6. FOO
Run Code Online (Sandbox Code Playgroud)

当我只运行预处理器时,输出文件包含20.

但是,根据我的理解,预处理器只是简单地替换文本.所以这就是我认为正在发生的事情(这显然是错误的但是很蠢):

  1. NUM定义为10.
  2. 因此,在第2行中,NUM被替换为10.所以现在我们有"#define FOO 10".
  3. NUM未定义.
  4. NUM已重新定义,现在为20.
  5. 根据第2行更换FOO,第2行在第4行重新定义之前,为10.

所以我认为输出应该是10而不是20.可以解释它出错的地方吗?

macros c-preprocessor

65
推荐指数
4
解决办法
2866
查看次数

在GNU C宏envSet(名称)中,(void)""名称是什么意思?

我今天遇到了这种语法,无法理解其含义:

// Uses the GNU C statement expression extension
#define envSet(name) ({ \
static int initialised; \
static bool set; \
(void) "" name; \
if (!initialised || !g_cacheEnv) { \
    const char *value = getenv(name); \
    set = value != NULL; \
    initialised = true; \
} \
set; \
})
Run Code Online (Sandbox Code Playgroud)

我无法理解的具体路线是:

(void) "" name; \
Run Code Online (Sandbox Code Playgroud)

有人可以对此有所了解吗?

c macros gcc c-preprocessor

65
推荐指数
3
解决办法
2147
查看次数

预处理器中的C#宏定义

C#能否像使用预处理器语句在C编程语言中那样定义宏?我想简化某些重复语句的常规输入,如下所示:

Console.WriteLine("foo");
Run Code Online (Sandbox Code Playgroud)

c# macros c-preprocessor

64
推荐指数
5
解决办法
11万
查看次数

linux __user宏有什么含义?

我希望有人可以解释linux内核源代码中使用的__user宏的细微差别.

首先,宏观:

# define __user         __attribute__((noderef, address_space(1)))
Run Code Online (Sandbox Code Playgroud)

现在,经过一些谷歌搜索后,我读到这个宏允许一个指针指定属于用户地址空间,并且不应该取消引用它.

我可能会遗漏一些明显的事实,但有人可以解释这样一个宏的含义吗?例如,这个宏的使用位置有什么好的例子?如果我错过了一些明显的东西,请再次原谅我.

为了把它放在某些环境中,我在检查一些USB代码(linux/usbdevice_fs.h)时遇到了宏.我只是在寻找对内核中使用的这个宏(或其他类似的宏)的一般理解.

谢谢你的期待!

c macros kernel linux-kernel

60
推荐指数
3
解决办法
2万
查看次数

使用宏收集优秀的应用程序和程序

我对Macros非常感兴趣,刚刚开始了解它的真正力量.请帮我收集宏系统的一些很好的用法.

到目前为止,我有这些结构:

模式匹配:

安德鲁赖特和布鲁斯杜巴.Scheme的模式匹配,1995

Prolog精神的关系:

Dorai Sitaram.在schelog中编程. http://www.ccs.neu.edu/home/dorai/schelog/schelog.html

Daniel P. Friedman,William E. Byrd和Oleg Kiselyov.理性的计划者.麻省理工学院出版社,2005年7月

Matthias Felleisen.将Prolog音译为方案.技术报告182,印第安纳大学,1985年.

可扩展循环结构:

塞巴斯蒂安·埃格纳 方案中的热切理解:SRFI-42的设计."计划与功能规划研讨会",2005年9月第13-26页.

奥林颤抖.循环的解剖:范围和控制的故事.在国际功能规划会议,第2-14页,2005年.

班级系统:

PLT.PLT MzLib:图书馆手册.技术报告PLT-TR2006-4-v352,PLT方案公司,2006年 http://www.plt-scheme.org/techreports/

Eli Barzilay.骗取. http://www.barzilay.org/Swindle.

组件系统:

Ryan Culpepper,Scott Owens和Matthew Flatt.组件接口中的语法抽象.在生成编程和组件工程国际会议,第373-388页,2005年

软件合同检查

Matthew Flatt和Matthias Felleisen.单位:用于HOT语言的酷模块在ACM SIGPLAN会议上编程语言设计和实现,第236-248页,1998年

Oscar Waddell和R. Kent Dybvig.扩展句法抽象的范围.在编程语言原理研讨会上,第203-215页,第199页

解析器生成器

Scott Owens,Matthew Flatt,Olin Shivers和Benjamin McMullan.Scheme中的Lexer和解析器生成器.关于计划和功能规划研讨会,2004年9月第41-52页.

工程语义工具:

Matthias Felleisen,Robert Bruce Findler和Matthew Flatt.PLT Redex的语义工程.MIT出版社,2009年8月.

编译器转换的规范:

Dipanwita Sarkar,Oscar Waddell和R. Kent Dybvig.用于编译器教育的纳米框架.功能规划期刊,15(5):653-667,2005年9月.教育明珠.

新的执行形式

具有可序列化延续的Servlet Greg Pettyjohn,John Clements,Joe Marshall,Shriram Krishnamurthi和Matthias Felleisen.广义堆栈检查的延续.在国际功能规划会议上,第216-227页,2005年.

定理证明系统

塞巴斯蒂安·埃格纳 方案中的热切理解:SRFI-42的设计.在计划与功能规划研讨会上,2005年9月第13-26页.

基类的扩展与类型

Sam Tobin-Hochstadt和Matthias Felleisen.打字方案的设计和实施.在编程语言原理研讨会上,第395-406页,2008年.

怠惰

Eli Barzilay和John Clements.没有辛勤工作的懒惰:将懒惰和严格的语言结合起来进行教学.在教育中的功能和声明性编程中,第9-13页,2005年. …

lisp macros scheme hygiene racket

57
推荐指数
2
解决办法
2633
查看次数

*args,**jinja2宏中的kwargs

如何为Jinja2宏处理额外的args和kwargs?文档不是很清楚.

例如,这显然是错误的:

{% macro example_1(one, two, **kwargs) %}
    do macro stuff
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

结果

jinja2.exceptions.TemplateSyntaxError

TemplateSyntaxError: expected token 'name', got '**'
Run Code Online (Sandbox Code Playgroud)

文件说:

kwargs

varargs但是关键字参数.所有未使用的关键字参数都存储在此特殊变量中.

不幸的是,任何额外关键字参数的组合都是错误,

{% macro example_2(one, two) %}
    do macro stuff
{% endmacro %}

{{ example_2(one, two, test='test') }}

TypeError: macro 'example_2' takes no keyword keyword argument 'test'
Run Code Online (Sandbox Code Playgroud)

我没有例子,也没有在Jinja2源代码atm中讨论.此时我不清楚文档.任何想法都赞赏.

python macros jinja2

56
推荐指数
1
解决办法
9170
查看次数

Swift中的宏?

Swift目前是否支持宏,还是未来计划增加支持?目前我散布:

Log.trace(nil, function: __FUNCTION__, file: __FILE__, line: __LINE__)
Run Code Online (Sandbox Code Playgroud)

在我的代码中的各个地方.

macros swift

54
推荐指数
4
解决办法
3万
查看次数