Tag: macros

在#definemacros中转义#符号?

没有进入血淋淋的细节,我想使用一个#definemacros,将扩大到#include但'#'符号混淆预处理器(因为它认为我想引用一个参数)。 例如,我想要做这样的事情: #define MACRO(name) #include "name##foo" 然后使用它: MACRO(Test) 这将扩大到: #include "Testfoo" 谦虚的#符号导致预处理器barf。 MinGW给我以下错误: '#' is not followed by a macro parameter 我想我需要逃避#的标志,但我不这样做,如果这是可能的。 是的,macros确实是邪恶的

在C中自动释放堆栈variables

不幸的是,在C没有任何智能指针..但是有可能build立一个macros,包装variables声明和调用函数调用该variables作为inputvariables时,离开variables声明的范围? 对不起,这个词很长,但是我正在研究xnu内核,其中有许多内置引用计数器的元素,当使用它来避免内存泄漏时,不要忘记取消这个元素。 例如,如果我有以下types的proc_t : struct proc; typedef struct proc * proc_t; 我想在一个范围内声明一个基于这个types的堆栈variables,例如: { proc_t_release_upon_exit proc_t proc_iter = proc_find(mypid); //the rest of the code in this scope } 在预处理器分析macros并编译之前,我期望生成的以下代码是: { proc_t myproc = proc_find(mypid) //the rest of the code in scope proc_rele(myproc); } 有没有什么办法来定义像C这样的macros?

可变的recursion预处理器macros – 有可能吗?

我遇到了一点理论上的问题。 在一段代码中,我维护着一组macros #define MAX_OF_2(a, b) (a) > (b) ? (a) : (b) #define MAX_OF_3(a, b, c) MAX_OF_2(MAX_OF_2(a, b), c) #define MAX_OF_4(a, b, c, d) MAX_OF_2(MAX_OF_3(a, b, c), d) …etc up to MAX_OF_8 我想要做的就是把它们replace成这样的东西: /* Base case #1, single input */ #define MAX_OF_N(x) (x) /* Base case #2, two inputs */ #define MAX_OF_N(x, y) (x) > […]

Swift 3:如何使用PREPROCESSOR标志(如`#if DEBUG`)来实现API密钥?

在Objective-C ,使用静态string常量来定义替代API键(例如区分分析包的RELEASE和DEBUG键,如MixPanel,Flurry或Crashlytics)有时是有用的: #if DEBUG static NSString *const API_KEY = @"KEY_A"; #else static NSString *const API_KEY = @"KEY_B"; #endif 接着… [Analytics startSession:API_KEY]; 这是如何转化为Swift的,因为Swift编译器不再使用预处理器?

Scalamacros和JVM的方法大小限制

我正在使用ScalamacrosreplaceJava程序中的一些代码生成组件,并正在运行到Java虚拟机对于单个方法(64千字节)生成的字节代码大小的限制。 例如,假设我们有一个大型的XML文件,它代表了我们想要在程序中使用的从整数到整数的映射。 我们希望避免在运行时parsing这个文件,所以我们将编写一个macros来编译时进行parsing,并使用文件的内容来创build我们方法的主体: import scala.language.experimental.macros import scala.reflect.macros.Context object BigMethod { // For this simplified example we'll just make some data up. val mapping = List.tabulate(7000)(i => (i, i + 1)) def lookup(i: Int): Int = macro lookup_impl def lookup_impl(c: Context)(i: c.Expr[Int]): c.Expr[Int] = { import c.universe._ val switch = reify(new scala.annotation.switch).tree val cases = mapping […]

你在Netbeans中创build了哪些有用的macros?

我使用Netbeans(每晚构build)进行Ruby on Rails开发,我正在寻求加强我的macros。 我自己创造了一些: 复制标识符: select-identifier copy-to-clipboard 将剪贴板粘贴到标识符上: select-identifier paste-from-clipboard 双引号元素 select-element-next "\"" 单引号元素: select-element-next "'" 但是我正在寻找其他有用的,谷歌没有给我什么。 loggingmacrosfunction通常不太好,所以我宁愿自己写“macros”,但我甚至找不到一个引用,列出了什么命令(如“select标识符”)实际上是可用的。 任何Netbeansmacros观大师在那里?

GCC / G ++macros区分Linux和Mac OSX的macros?

GCC / G ++macros区分Linux和Mac OSX的macros?

Scalamacros的静态返回types

所以我有这个macros: import language.experimental.macros import scala.reflect.macros.Context class Foo class Bar extends Foo { def launchMissiles = "launching" } object FooExample { def foo: Foo = macro foo_impl def foo_impl(c: Context): c.Expr[Foo] = c.Expr[Foo](c.universe.reify(new Bar).tree) } 我已经说过三次了,我想让foo返回一个Foo ,但是我可以做以下事情(在2.10.0-RC3中): scala> FooExample.foo res0: Bar = Bar@4118f8dd scala> res0.launchMissiles res1: String = launching 同样的事情发生,如果我删除c.Expr上的types参数。 如果我真的想要确保谁打电话给foo看不到他们得到一个Bar ,我必须在树本身添加一个types归属。 这实际上非常棒,例如,我可以将某个macros指向某种types的模式,并使用表示词汇表中的词的成员方法创build一些Vocabulary类的匿名子类,这些方法将在返回的对象上提供。 不过,我想明白我在做什么,所以我有几个问题。 首先, foo方法实际返回的types是什么? […]

嗯,你是谁PRIu64?

我是C新手,面临着: #include <stdio.h> #include <inttypes.h> int main(void) { uint64_t foo = 10; printf("foo is equal to %" PRIu64 "!\n", foo); return 0; } 它的工作原理! 我不明白为什么? 有人可以帮我吗? 非常感谢! 托

我在哪里可以学习构buildAST的Scalamacros?

在哪里我可以学习如何构buildScala的macros生成的AST? Scaladoc没有我想要的那么有帮助。 例如: abstract def Apply(sym: Universe.Symbol, args: Universe.Tree*): Universe.Tree A factory method for Apply nodes. 但是,我怎么知道一个Apply节点是什么? 我在哪里可以findAST的节点types列表,以及它们如何组合在一起?