Questions tagged «macros»

***请勿用于VBA / MS-Office语言。改为使用相应的[vba]标签。***宏是一种规则或模式,它指定根据以下内容应如何将某个输入序列(通常是一个字符序列)映射到一个输出序列(通常也是一个字符序列)。确定的程序。

5
什么是 ”:-!!” 用C代码?
我碰到了/usr/include/linux/kernel.h中的这个奇怪的宏代码: /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct …
1664 c  linux  macros  linux-kernel 


14
是什么使Lisp宏如此特别?
阅读Paul Graham关于编程语言的文章,人们会认为Lisp宏是唯一的选择。作为繁忙的开发人员,在其他平台上工作,我没有使用Lisp宏的特权。作为想了解蜂鸣声的人,请解释一下此功能如此强大的原因。 还请将此与我从Python,Java,C#或C开发的世界中了解的东西联系起来。


10
我可以在Visual Studio 2012/2013/2015/2017/2019中记录/播放宏吗?
显然,宏是从Visual Studio 2012中删除的。 是否有一个插件/扩展程序/工具可以让我记录和播放键盘宏(与Visual Studio 2010中的记录/播放临时宏非常相似)? 例如,在将代码从一种语言转换为另一种语言或从文本列表快速生成属性时,通常会使用宏。

8
在参数数量上重载宏
我有两个宏FOO2和FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... 我想定义一个新的宏FOO,如下所示: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) 但这是行不通的,因为宏不会在参数数量上重载。 无需修改FOO2和FOO3,是有一些方法来定义一个宏FOO(使用__VA_ARGS__或以其他方式),以获得分派的相同的效果FOO(x,y)来FOO2,并FOO(x,y,z)到FOO3?
183 c  macros  c-preprocessor 

1
从宏获取带有匿名类方法的结构类型
假设我们要编写一个宏,该宏使用一些类型成员或方法定义一个匿名类,然后使用这些方法创建该类的实例,该实例被静态类型化为结构类型,依此类推。在2.10中的宏系统中是可行的。 0,并且类型成员部分非常简单: object MacroExample extends ReflectionUtils { import scala.language.experimental.macros import scala.reflect.macros.Context def foo(name: String): Any = macro foo_impl def foo_impl(c: Context)(name: c.Expr[String]) = { import c.universe._ val Literal(Constant(lit: String)) = name.tree val anon = newTypeName(c.fresh) c.Expr(Block( ClassDef( Modifiers(Flag.FINAL), anon, Nil, Template( Nil, emptyValDef, List( constructor(c.universe), TypeDef(Modifiers(), newTypeName(lit), Nil, TypeTree(typeOf[Int])) ) …

1
您遇到过的最糟糕的现实世界宏/预处理器滥用情况是什么?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 您遇到过的最糟糕的 现实世界宏/预处理器滥用情况(请不要有任何人为的IOCCC答案* haha​​ *)? 如果确实很有趣,请添加一个简短的摘要或故事。目的是教一些东西,而不是总是告诉人们“从不使用宏”。 ps:我以前使用过宏...但是通常,当我有一个“真实的”解决方案时,我最终会摆脱它们(即使真正的解决方案是内联的,因此它变得类似于宏)。 奖励:举一个例子,其中宏确实比非宏解决方案好。 相关问题: C ++宏什么时候有益?
176 c++  c  macros  preprocessor 



24
__FILE__宏显示完整路径
__FILE__C中可用的标准预定义宏显示了文件的完整路径。有什么办法可以缩短这条路吗?我的意思不是 /full/path/to/file.c 我懂了 to/file.c 要么 file.c
164 c  file  macros  path 

2
#pragma是否曾经是C ++ 11标准的一部分?
传统上,避免C ++中包含多个标头的标准且可移植的方法是使用#ifndef - #define - #endif预编译器指令方案,该方案也称为宏保护方案(请参见下面的代码段)。 #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif 但是,在大多数实现/编译器中(请参见下图),还有一个更“优雅”的替代方案,其作用与称为的宏保护方案相同#pragma once。#pragma once与宏保护方案相比,它具有多个优点,包括更少的代码,避免名称冲突以及有时提高了编译速度。 经过研究,我意识到尽管#pragma once几乎所有已知的编译器都支持伪指令,但是伪#pragma once指令是否属于C ++ 11标准还是有一定的困惑。 问题: 有人可以澄清#pragma once指令是否属于C ++ 11标准吗? 如果它不是C ++ 11标准的一部分,是否有任何计划将其包含在更高版本中(例如C ++ 14或更高版本)? 如果有人可以进一步详细说明使用这两种技术中的任何一种(例如,宏观卫士与#pragma once)的优势/劣势,那也很好。




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.