标签: preprocessor-directive

用Swift语言替换#ifdef

在C/C++/Objective-C中,您可以使用编译器预处理器定义宏.此外,您可以使用编译器预处理器包含/排除代码的某些部分.

#ifdef DEBUG
    // Debug-only code
#endif
Run Code Online (Sandbox Code Playgroud)

Swift中有类似的解决方案吗?

xcode preprocessor preprocessor-directive swift

697
推荐指数
15
解决办法
23万
查看次数

预处理后gcc可以输出C代码吗?

我正在使用一个开源库,它似乎有很多预处理指令来支持除C之外的许多语言.这样我就可以研究库正在做什么了我想看看我在预处理后编译的C代码,更像是我写的东西.

gcc(或Linux中常用的任何其他工具)可以读取这个库,但输出的C代码将预处理转换为任何东西并且人类也可以读取吗?

c preprocessor c-preprocessor preprocessor-directive

90
推荐指数
6
解决办法
10万
查看次数

#if预处理器指令可以嵌套在C++中吗?

我对c ++中的预处理器指令有疑问:

例如:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif
Run Code Online (Sandbox Code Playgroud)

利用它我们可以用这种方式,并且可以在C++编译器的匹配ifndef,并endif以正确的方式?

c++ c-preprocessor preprocessor-directive

77
推荐指数
2
解决办法
3万
查看次数

#define是否在行业标准中被禁止?

我是一年级计算机专业的学生,我的教授说#define的行业标准,以及被禁止#if,#ifdef,#else,和其他一些预处理指令.由于出乎意料的行为,他使用了"禁止"一词.

这准确吗?如果是这样的话?

事实上,是否存在禁止使用这些指令的任何标准?

c c-preprocessor preprocessor-directive

68
推荐指数
10
解决办法
7822
查看次数

强制编译器忽略程序中的某些行

假设我有10,000行C++代码.此代码的200行用于测试目的(例如,检查程序并显示错误消息).

在C++中有没有办法忽略或考虑代码的某些行(可能有预处理器关键字)?

c++ preprocessor-directive

50
推荐指数
4
解决办法
1万
查看次数

是否有用于检测C++ 11x支持的预处理器指令?

如果有一些代码我想尽可能多地使用C++ 11x扩展,但如果不支持则有后备.目前,GCC的OSX版本和VisualC编译器几乎不支持C++ 11x,所以我使用:

#if (defined(__APPLE__) || (defined(_WIN32)))
   ...fallback code without C++11x ...
#else
   ... code using C++11x ...
#endif
Run Code Online (Sandbox Code Playgroud)

这可行,但不是真正正确的事情,特别是因为MacPorts中的gcc编译器支持c ++ 11x.

#define C11X_SUPPORTED型宏吗?也许GCC只有一些东西?

c++ gcc c-preprocessor preprocessor-directive

49
推荐指数
3
解决办法
4万
查看次数

什么是双重评估,为什么要避免?

我正在使用像C++这样的C++阅读它

#define max(a,b) (a > b ? a : b)
Run Code Online (Sandbox Code Playgroud)

可以导致"双重评估".有人能给我一个例子,说明何时进行双重评估以及为什么它会变坏?

PS:令人惊讶的是,除了在Clojure中的一个例子(我无法理解)之外,我在google搜索时找不到任何详细的解释.

c++ macros preprocessor-directive

48
推荐指数
4
解决办法
5960
查看次数

C预处理器测试多个宏的定义

我搜索了网站,但没有找到我正在寻找的答案,所以这里是一个非常快速的问题.

我想做那样的事情:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我知道_WIN32是为32位和64位窗口定义的,所以我可以用于Windows检测.我更感兴趣的是我是否可以使用预处理程序指令这样的逻辑运算符,如果是,如何,因为上述方法不起作用.

用gcc编译我得到:

警告:#ifdef指令结束时的额外令牌,它基本上只需要第一个MACRO并忽略其余的.

c logical-operators c-preprocessor preprocessor-directive

43
推荐指数
2
解决办法
2万
查看次数

Objective-C预处理器指令'if not'

我理解如何使用这样的预处理器指令:

#if SOME_VARIABLE
    // Do something
#else
    // Do something else
#endif
Run Code Online (Sandbox Code Playgroud)

但是,如果我只想做某事,如果不是SOME_VARIABLE那会怎么样呢.

显然我仍然可以这样做:

#if SOME_VARIABLE

#else
    // Do something else
#endif
Run Code Online (Sandbox Code Playgroud)

...离开if,但有没有办法:

#if not SOME_VARIABLE
   // Do something
#endif
Run Code Online (Sandbox Code Playgroud)

这里的 Apple文档没有提示,但这似乎是一个非常基本的需求.

基本上我想做预处理器相当于:

if(!SOME_VARIABLE)(
{
   // Do Something
}
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios c-preprocessor preprocessor-directive

38
推荐指数
2
解决办法
2万
查看次数

转义#define宏中的#符号?

在没有进入血腥细节的情况下,我想使用一个#define扩展为a 的宏,#include但是'#'符号会混淆预处理器(因为它认为我想引用一个参数.)

例如,我想做这样的事情:

#define MACRO(name) #include "name##foo"
Run Code Online (Sandbox Code Playgroud)

并使用它:

MACRO(Test)
Run Code Online (Sandbox Code Playgroud)

这将扩展到:

#include "Testfoo"
Run Code Online (Sandbox Code Playgroud)

简单的#符号导致预处理器进入barf.MinGW给我以下错误:

'#' is not followed by a macro parameter

我想我需要逃避#符号,但如果这是可能的话,我不会.

是的,宏确实很邪恶......

c c++ macros c-preprocessor preprocessor-directive

37
推荐指数
5
解决办法
3万
查看次数