Tag: c preprocessor

在#definemacros中转义#符号?

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

你如何创build一个带有可变参数列表的仅debugging函数? 像printf()

我想使用与printf相同的参数进行debugging日志loggingfunction。 但是可以在优化版本中被预处理器删除。 例如: Debug_Print("Warning: value %d > 3!\n", value); 我已经看过可变macros,但是这些在所有平台上都不可用。 gcc支持他们, msvc不。

如何暂时禁用C / C ++中的macros扩展?

出于某种原因,我需要暂时禁用头文件中的一些macros, #undef MACRONAME undef #undef MACRONAME将使代码编译,但它将#undef MACRONAME现有的macros。 有没有办法只是禁用它? 我应该提到你并不知道macros的值,而且我正在寻找一个交叉编译器解决scheme(至less应该在GCC和MSVC中工作)。

Xcode预处理器输出

我想检查一些文件的预处理器的输出。 我怎样才能在Xcode中查看预处理器的输出?

找出GCC包含的path是

我试图以编程方式在Linux上find#includepath,据我所知,实际上意味着findGCC认为它是什么。 (这是真的吗?Clang是怎么做到的?) 根据http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html,一些组件涉及CPU架构和GCC版本; 后者似乎特别棘手; 我猜想可以通过运行gcc –version和parsing输出(或者gcc -v )来获得,但是这样看起来似乎不够好,最坏的情况是脆弱的。 假设你的程序正在用GCC进行编译,那么在代码中做这个操作可能是另外一个select,但是这需要依赖于这个假设。 推荐的方法是什么?

如何扩展/“预处理”C ++模板代码

为了正确地debuggingC ++中的复杂macros,我通常在其上运行预处理程序,以便准确地查看结果代码的外观。 有没有类似的方式来“预处理”模板代码?

当g被指定时,gcc是否定义了任何东西?

不久,我想知道gcc(或g ++。我需要它在C中 ,但也很好奇c ++)定义任何特殊的符号,如果启用-g 。 可以? 如果是这样,什么符号? 在search过程中,我发现: _DEBUG是手动定义的(通过手动方式我是指-D_DEBUG ),并且是从Visual C程序员中-D_DEBUG的习惯(因为VC在debugging模式下编译时定义了_DEBUG ) 如果在debugging模式下, NDEBUG被定义。 虽然我发现有几个地方这样说,但我用gcc和g ++在.c和.cpp文件中试过,没有或没有-g没有定义这样的符号! 编辑 :让我演示为什么我不想使用非标准符号: 设想一个内核模块,它可以执行某些操作,并提供包含在其他内核模块中的头文件,以便它们可以连接到这个模块。 现在作为一个设施,在我有一个头文件: #ifdef DEBUG <– This is what I need #define LOG(x, …) printk("Some extra info"x, ##__VA_ARGS__); #else #define LOG(x, …) printk("Without extra info"x, ##__VA_ARGS__); #endif 请注意,名称不是真正的LOG ,这是一个例子。 现在,我可以使用任何符号来进行DEBUG ,但是如果有人包含我的头文件,他们可能不会定义这个符号。 当然,我可以告诉他们“顺便说一下,为了得到标题在debugging模式,定义这个另一个符号”,但是这听起来不正确。 我可以在标题中定义符号并将其包含在所有的头文件中。 这样,如果它们包含我的头文件之一,它们也会得到debugging符号。 现在的问题是,如果他们不想在debugging模式下编译,我的头仍然认为他们在debugging模式。 所以我认为最好的是使用-g被使用时定义的符号,如果有的话! 更新 到目前为止,我得出的结论是我可以做这样的事情: […]

为什么会在项目中使用#include_next?

引用Wrapper Headers上的iOS 文档 : #include_next不区分<file>和“file”包含,也不检查指定的文件是否与当前文件具有相同的名称。 它只是查找名为的文件,从find当前文件的目录之后的searchpath中的目录开始。 使用`#include_next'会导致很大的混淆。 我们build议只在没有其他select的情况下使用它。 特别是,不应该在属于特定程序的头文件中使用; 它应该只用于沿着fixincludes的方向进行全局更正。 那么,两个问题,#include_next是什么,为什么你需要使用它?

C预处理器的替代

我有兴趣使用C预处理器以外的东西来预处理我的C和Objective-C源代码。 有没有好的select? 一个例子就是允许在C代码中间跳出一个python或者perl片断,然后在这个片断吐出C然后编译成正常的。

位数:预处理器魔法vs现代C ++

假设我想为16位块中的64位整数创build编译时构造的位计数查找表。 我知道这样做的唯一方法是下面的代码: #define B4(n) n, n + 1, n + 1, n + 2 #define B6(n) B4(n), B4(n + 1), B4(n + 1), B4(n + 2) #define B8(n) B6(n), B6(n + 1), B6(n + 1), B6(n + 2) #define B10(n) B8(n), B8(n + 1), B8(n + 1), B8(n + 2) #define B12(n) B10(n), B10(n + […]