c-preprocessor相关内容

C 中的命名空间

有没有办法(ab)使用 C 预处理器来模拟 C 中的命名空间? 我的想法是这样的: #define NAMESPACE name_of_ns一些功能(){some_other_function();} 这将被翻译成: name_of_ns_some_function() {name_of_ns_some_other_function();} 解决方案 当使用命名空间前缀时,我通常为 ..
发布时间:2022-01-14 22:53:11 C/C++开发

Fortran 中的 CPP 预处理语句可以缩进吗?

我对使用 Fortran 预处理语句还很陌生,并且有一个可能非常原生的问题.Fortran 预处理语句可以缩进吗?我在 Linux (openSUSE Leap) 上使用 Gfortran 4.8.1 进行了测试,结果发现它根本不能缩进. 以下代码 main.f90 与 gfortran -cpp main.f90 -o main 一起使用: 程序主程序隐式无#ifdef 调试print ..

是否有任何宏来确定我的代码是否正在编译到 Windows?

我想检测我正在编译的操作系统是否是 Windows.有没有我可以检查的简单宏来验证这一点? 解决方案 [编辑:我假设您想使用编译时宏来确定您所在的环境.也许您想确定您是在 Linux 下运行 Wine 还是在 Windows 上运行,但一般来说,您的编译器针对特定环境,要么是 Windows (DOS),要么不是,但它很少(从不?) 两者.] 一些编译器提供宏来指示 Windows ..
发布时间:2022-01-11 22:47:20 C/C++开发

#if 0 作为定义

我需要一种方法来定义一个 FLAGS_IF 宏(或等效的),以便 FLAGS_IF(表达式)FLAGS_ENDIF 在调试中编译时(例如使用特定的编译器开关)编译为 if (MyFunction(表达式)){} 而在发布时不会产生任何指令,就像这样 #if 0#万一 由于我对 C/C++ 预处理器 ..
发布时间:2022-01-11 20:20:58 其他开发

包含宏的 C++ 方法声明

我正在使用 QuickFAST 库,在检查它时我发现了这个我似乎并没有真正理解的类声明!我的意思是类名之前的宏名是什么! 类 QuickFAST_Export 消息:公共 FieldSet 我也发现了这个声明 friend void QuickFAST_Export intrusive_ptr_add_ref(const Field * ptr); 再一次我不明白这个声明的用途! 有 ..
发布时间:2022-01-11 20:20:07 C/C++开发

C宏给出编译时错误

我想用宏来扩展一个功能.于是我写了如下代码: #define INIT ( T ) \结构 T * 初始化##T() { \struct T * obj = ( struct T *)malloc( sizeof (struct T ));\返回对象;\} \ 我使用以下方法调用宏: 初始化(mystruct); 错误:: 错误:在“struct"之前需要“="、“,"、“;"、“a ..
发布时间:2022-01-11 20:19:31 其他开发

在 Visual Studio 中使用参数为整个项目或解决方案定义预处理器宏的选项

我希望一些具有参数的宏在项目的所有文件中都可用,或者更好的是完整的解决方案.在VS2010中,如果我将它们添加到属性->配置属性->C/C++->预处理器中的预处理器定义中,使用类似的东西 SQUARE(x)=((x)*(x));CUBE(x)=(SQUARE(x)*x); 编译器不使用宏定义.然而,这种方法可能很接近,因为当我将鼠标悬停在源代码中的宏上时,IntelliSense 提供了正确 ..
发布时间:2022-01-11 20:16:34 C/C++开发

C 预处理器和操作顺序

我正在学习C,但我不明白这一点: #define square(x) x*xa = square(2+3)//a = 11 运行时,为什么 a 最终会变成 11? 解决方案 展开为2+3*2+3,相当于2+(3*2)+3.使用括号来修复它: #define square(x) ((x)*(x)) 现在用 square(x++) 试试,你会遇到更多问题(未定义的行为).如果可以,请避 ..
发布时间:2022-01-11 20:13:41 C/C++开发

什么是第一 - 模板实例化与宏扩展?

我们来看一个这样的代码示例(它只是一个结合define和template的人为示例,不要寻找任何意义它): #define 逗号,模板类测试{上市:测试(){}void Foo(A var COMMA int test);};测试纳兹; 问题: 我的假设是否正确,首先预处理器将搜索/替换所有出现的 COMMA,第二编译器将按该顺序实例化任何模板? 跟进: ..
发布时间:2022-01-11 20:13:16 C/C++开发

正确的 C 预处理器宏无操作

对于调试日志,我经常看到并使用类似的东西 #ifdef 调试#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)#别的#define DLOG(fmt, args...)#万一 但在很多地方,我看到第二个 #define 被替换为 #define DLOG(fmt, args...) do {} while ..
发布时间:2022-01-11 20:13:00 其他开发

C 预处理器:及早评估宏

考虑以下设置: 啊.h #define A 5#define B A#undef A#定义一个 3 交流 #include "a.h"#include 主函数(){printf("%d\n", B);返回0;} 虽然这非常合理地打印 3,但有没有办法让它打印 5,即在 a.h 的第二行用 5 替换 A? 解决方案 不,没有办法做到这一点.除非你知道 A 的所 ..
发布时间:2022-01-11 20:12:44 其他开发

C 预处理器:__COUNTER__ 的自己的实现

我目前在我的 C 库代码中使用 __COUNTER__ 宏来生成唯一的整数标识符.它运行良好,但我发现两个问题: 它不属于任何 C 或 C++ 标准. 也使用 __COUNTER__ 的独立代码可能会混淆. 因此,我希望自己实现一个等效于 __COUNTER__ 的功能. 我知道但不想想使用的替代方法: __LINE__(因为每行多个宏不会获得唯一的 ID) BOOST ..
发布时间:2022-01-11 20:10:46 其他开发

C 预处理器宏扩展

我正在尝试做(我本来以为的)是一个简单的宏扩展 #define CLEAR_DIGIT(a,b) iconMap[a] &= ~(b)#define R1 4, 16清除数字(R1); 现在我希望它扩展为 CLEAR_DIGIT(4,16) 扩展为 iconMap[4] &= ~16但是,它没有...如果我将 CLEAR_DIGIT 设为函数: void ClearDigit(unsigne ..
发布时间:2022-01-11 20:09:09 其他开发

宏优于 C++ 中的内联

我们知道内联是有利的,因为它们由编译器检查,并且与宏相比,当作为参数传递时,相同的操作(如 ++x)不会多次计算. 但在一次采访中,有人问我在 C++ 中宏更适合内联的具体优势或情况. 有没有人知道这个问题的答案或者可以给出一个想法? 解决方案 我唯一能想到的就是有一些技巧可以用宏来完成,而内联函数却无法做到.在编译时将令牌粘贴在一起,以及那种骇客. ..
发布时间:2022-01-11 20:08:53 C/C++开发

Cygwin 的标准 #ifdef

如果我想知道我是否在 Cygwin 上编译,要检查的标准宏是什么? 我见过 #ifdef _WIN32,但这似乎不是面向未来的或特定于 Cygwin 的. 解决方案 似乎 #ifdef __CYGWIN__ 有效. 在这个列表 上找到它 ..
发布时间:2022-01-11 20:07:43 其他开发