preprocessor-directive相关内容
我经常发现自己在希望像其余代码一样缩进预处理器指令的情况下(例如#if缩进,如if)。它seems legal,它是common sense that it's sometimes a good thing,但Visual不会让它变得容易。 有没有办法防止每次我无意中按#时,Visual C++2010编辑器都会将代码粘在左边?并且不使用自动缩进(CTRL+K、CTRL+F)中断预处理器指令的缩
..
我知道如何使用这样的预处理器指令: #if SOME_VARIABLE // Do something #else // Do something else #endif 但是如果我只想做一些事情,而不是某些_Variable,该怎么办? 显然我仍然可以这样做: #if SOME_VARIABLE #else // Do something else
..
..
我一直在编写 #if DEBUG、#else、#endif 代码片段,我注意到 Visual Studio 没有'不要让我使用自动完成来完成部分键入的成员名称,并且它不会检查灰色的非活动代码是否存在错误.我发现让它再次受到关注的唯一方法是将构建模式从调试切换到发布.但这很不方便,感觉有更好的方法. 示例: #if 调试扔;#别的throw new exc//我想在这里使用自动完成但不能,因
..
我之前使用过一个代码库,它有一个用于启用和禁用代码段的宏系统.它看起来像下面这样: #define IN_USE X#define NOT_IN_USE _#如果定义(WIN32)#define FEATURE_A IN_USE#define FEATURE_B IN_USE#define FEATURE_C NOT_IN_USE#elif 定义(OSX)#define FEATURE_A NO
..
最初我认为我需要这个,但我最终避免了它.然而,我的好奇心(以及对知识的渴望,哼)让我问: 可以一个预处理器宏,例如 #include "MyClass.h"INSTANTIATE_FOO_TEMPLATE_CLASS(MyClass) 扩展到另一个包含,如 in #include "MyClass.h"#include "FooTemplate.h"模板类 FooTemplate;
..
我是在 C++ 中使用宏来阅读的,比如 #define max(a,b) (a > b ? a : b) 可能导致“双重评估".谁能给我一个例子,说明何时发生双重评估以及为什么它不好? PS:令人惊讶的是,除了 Clojure 中的示例(其中我不明白). 解决方案 想象一下你是这样写的: #define Max(a,b) (a
..
在不涉及血淋淋的细节的情况下,我想使用一个 #define 宏,该宏将扩展为一个 #include 但“#"符号会混淆预处理器(如它认为我想引用一个论点.) 例如,我想做这样的事情: #define MACRO(name) #include "name##foo" 然后这样使用它: 宏(测试) 这将扩展为: #include "Testfoo" 不起眼的 # 符号导致预处理器出错
..
是否存在任何 C++ 编译时宏来检测代码正在哪个 Windows 操作系统上编译.我基本上只想在Win7上支持某些功能.所以我有兴趣做这样的事情 #if = 赢7//这个函数会做一些只在 Win7 版本上有效的事情.布尔我的函数{//在这里做点什么}#别的//这个函数通常会返回 false,因为它在 win7 以下的操作系统上不支持布尔我的函数{返回假;}#万一 还有其他更
..
我需要使用配置创建多个版本的项目,就像我们使用 #define、#if、#endif 一样. 使用这些预处理器指令的缺点是我需要在项目的几乎每个文件中定义符号,但我想通过我的构建配置来处理这个事情. 我什至不确定构建配置是否会帮助我做到这一点. 我想要的是,如果我创建一个名为“Development"的配置而另一个名为“QA"的配置,我的代码将如下所示: if #Develop
..
在 C++ 中有预定义的宏: #if 已定义(_M_X64) ||定义(__amd64__)//为 64 位目标构建const unsigned long MaxGulpSize = 1048576 * 128;//兆字节 = 1048576;const unsigned long MaxRecsCopy = 1048576 * 16;#别的const unsigned long MaxGulp
..
我正在编写一个我希望在 Windows 和 Windows 上使用的类Linux. 此类中的方法之一是访问 Windows 注册表 我希望实现的是在使用 Linux 机器时以某种方式禁用此特定方法. 首先,我做了一些研究,看看是否有适合 一个 href="https://en.wikipedia.org/wiki/.NET_Core" rel="nofollow norefer
..
我正在尝试对 iOS 7 进行调整,以便当设备是 ARM64 时它运行一个版本,当它不是时运行另一个版本(因为 float 用于 32 位,double 用于 64(如果你有解决方案让我知道.) 应该是这样的 if ARM64 {\\运行双重代码}别的 {\\运行浮动代码} 解决方案 您将执行以下操作 #if __LP64__\\您在 64 位上运行#别的\\您在 32 位上运行#万
..
我正在编写一个我希望在 Windows 和 Windows 上使用的类Linux. 此类中的方法之一是访问 Windows 注册表 我希望实现的是在使用 Linux 机器时以某种方式禁用此特定方法. 首先,我做了一些研究,看看是否有适合 一个 href="https://en.wikipedia.org/wiki/.NET_Core" rel="nofollow norefer
..
我的应用程序使用了一个不会在模拟器上构建和/或运行的库,所以我通过用预处理器指令包围引用来有效地剔除对该库的引用: #if !(TARGET_IPHONE_SIMULATOR)//做真正的实现#别的//做一个虚拟的实现来测试 XCode 会自动检查我当前的目标是什么,并评估我认为不错的 #if/#else.问题是,它会关闭语法高亮、自动完成等任何不会被编译的条件.(例如,如果我当前的目标是模拟
..
函数中毒是 C++ 中非常有用的技术. 一般来说,它指的是使功能无法使用,例如如果您想禁止在程序中使用动态分配,您可以“毒化" malloc 函数使其无法使用.'中毒'一个标识符意味着在'中毒'之后对标识符的任何引用都是一个硬编译器错误 例如(查看现场演示这里) #include #include #pragma GCC 毒药 mallocint main(){int* p=(int
..
uint64_t 类型不保证在 32 位平台上定义,代码类似 int main() {uint64_t i = 0;} 可能导致不完整类型类型的编译错误. 是否有预处理器指令来检查 uint64_t 是否存在?有没有其他方法可以检查类型是否已定义? 解决方案 我认为合理的做法是检查是否定义了关联的宏 UINT64_MAX,例如 #include /* 不要忘记包含 */...#
..
如何注入C# 预处理器指令通过反射到接口? 示例: 我想将 #if SILVERLIGHT 注入任何 WCF 服务合同接口. 解决方案 简短的回答:你不能. 稍微长一点的答案:你的问题一开始就没有意义. 预处理器指令在编译之前进行处理.该处理的结果是新的、修改过的源代码.然后编译该源代码. 例如,如果编译时没有定义SILVERLIGHT符号,那么#if SiLVERL
..
在 C/C++/Objective C 中,您可以使用编译器预处理器定义宏.此外,您可以使用编译器预处理器包含/排除部分代码. #ifdef DEBUG//仅调试代码#万一 Swift 中是否有类似的解决方案? 解决方案 是的,你可以做到. 在 Swift 中,您仍然可以使用“#if/#else/#endif"预处理器宏(尽管受到更多限制),如 Apple 文档.举个例子: #
..
我正在使用 Progress-4GL、11.6 版、appBuilder 和过程编辑器. 我刚刚创建了一个名为“table_X"的表,我在代码中使用它,例如: FIND table_X ... 不过,我的程序是通用的,但是表是定制的(有些客户有这个表,有些没有). 所以,我想添加一个“预处理器",例如: &IFDEF table_X&THEN FIND table_X ...&E
..