我正在迁移一个UIViewController类来训练一下Swift。 我通过桥接头成功使用Objective-C代码,但是我需要导入一个包含#define指令的常量文件。 我在使用cocoa和Objective-C (简单macros)的Swift中看到了以下内容: 简单的macros 在通常使用#define指令来定义C和Objective-C中的原始常量的地方,Swift中使用全局常量。 例如,常量定义#define FADE_ANIMATION_DURATION 0.35可以在Swift中更好地expression, let FADE_ANIMATION_DURATION = 0.35 。 由于简单的常量macros直接映射到Swift全局variables,因此编译器会自动导入C和Objective-C源文件中定义的简单macros。 所以,这似乎是可能的。 我已经将包含常量的文件导入到桥接头文件中,但是我的.swift文件没有可见性,无法parsing。 我该怎么做才能让我的常量在Swift中可见? 更新: 它似乎与NSString常量,但不与布尔值: #define kSTRING_CONSTANT @"a_string_constant" // resolved from swift #define kBOOL_CONSTANT YES // unresolved from swift
我想知道如果我们可以在C / C ++中有recursionmacros吗? 如果是,请提供一个示例。 第二件事:为什么我不能执行下面的代码? 我在做什么错误? 是因为recursionmacros吗? # define pr(n) ((n==1)? 1 : pr(n-1)) void main () { int a=5; cout<<"result: "<< pr(5) <<endl; getch(); }
我试图将这个Obj-C代码转换为Swift代码,但我不知道这个代码的等价物应该是什么? #define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180) 我Googlesearch,发现这一点 但我不明白如何在我的情况下在Swift中转换?
我刚开始使用Qt,并注意到所有示例类定义都将macrosQ_OBJECT作为第一行。 这个预处理macros的目的是什么?
在C99中,可变macros的空参数有一个众所周知的 问题 。 例: #define FOO(…) printf(__VA_ARGS__) #define BAR(fmt, …) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); 上面的BAR()的使用根据C99标准确实是不正确的,因为它会扩展到: printf("this breaks!",); 注意尾随的逗号 – 不可行。 一些编译器(例如:Visual Studio 2010)将安静地摆脱尾随的逗号。 其他编译器(例如:GCC)支持在__VA_ARGS__放置## ,如下所示: #define BAR(fmt, …) printf(fmt, ##__VA_ARGS__) 但是有没有符合标准的方法来获得这种行为? 也许使用多个macros? 现在, ##版本似乎得到了很好的支持(至less在我的平台上),但是我更愿意使用符合标准的解决scheme。 先发制人:我知道我只能写一个小function。 我正在尝试使用macros来做到这一点。 编辑 :这是一个例子(虽然简单)为什么我想要使用BAR(): #define BAR(fmt, …) printf(fmt "\n", ##__VA_ARGS__) BAR("here is a log message"); BAR("here is a […]
在这篇文章的最后: http : //www.learncpp.com/cpp-tutorial/45-enumerated-types/ ,它提到了以下内容: 最后,与常量variables一样,枚举types在debugging器中显示出来, 使得它们在这方面比#defined值更有用 。 上面的大胆的句子是如何实现的? 谢谢。
假设我们有这样一个macros #define FOO(type,name) type name 我们可以使用像 FOO(int, int_var); 但并不总是这样简单: FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2 当然我们可以这样做: typedef std::map<int, int> map_int_int_t; FOO(map_int_int_t, map_var); // OK 这不是很符合人体工程学的 加types不兼容必须处理。 任何想法如何解决这个macros?
有什么方法获得可选参数与C ++macros? 某种超载也会很好。
显然macros是从Visual Studio 2012中删除的。 有没有一个插件/扩展/工具,让我logging和播放键盘macros(很像在Visual Studio 2010录制/播放临时macros)? 例如,我通常会在将代码从一种语言转换为另一种语言时使用macros,或者从文本列表等快速生成属性。
什么是最糟糕的 现实世界的macros/预处理器滥用你曾经遇到(请不要做作的IOCCC答案*哈哈*)? 请添加一个简短的片段或故事,如果它真的很有趣。 目标是教一些东西,而不是总是告诉人们“不要使用macros”。 ps:我之前使用过macros,但是通常当我有一个“真正的”解决scheme(即使真正的解决scheme是内联的,所以它变得类似于一个macros)我最终摆脱它们。 奖金:给出一个例子,其中macros观确实比非macros观解决scheme更好。 相关问题: 什么时候C ++macros有益?