在C/C++/Objective-C中,您可以使用编译器预处理器定义宏.此外,您可以使用编译器预处理器包含/排除代码的某些部分.
#ifdef DEBUG
// Debug-only code
#endif
Run Code Online (Sandbox Code Playgroud)
Swift中有类似的解决方案吗?
我正在使用一个开源库,它似乎有很多预处理指令来支持除C之外的许多语言.这样我就可以研究库正在做什么了我想看看我在预处理后编译的C代码,更像是我写的东西.
gcc(或Linux中常用的任何其他工具)可以读取这个库,但输出的C代码将预处理转换为任何东西并且人类也可以读取吗?
我对c ++中的预处理器指令有疑问:
例如:
#ifndef QUESTION
//some code here
#ifndef QUESTION
//some code here
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
利用它我们可以用这种方式,并且可以在C++编译器的匹配ifndef,并endif以正确的方式?
我是一年级计算机专业的学生,我的教授说#define的行业标准,以及被禁止#if,#ifdef,#else,和其他一些预处理指令.由于出乎意料的行为,他使用了"禁止"一词.
这准确吗?如果是这样的话?
事实上,是否存在禁止使用这些指令的任何标准?
假设我有10,000行C++代码.此代码的200行用于测试目的(例如,检查程序并显示错误消息).
在C++中有没有办法忽略或考虑代码的某些行(可能有预处理器关键字)?
如果有一些代码我想尽可能多地使用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++这样的C++阅读它
#define max(a,b) (a > b ? a : b)
Run Code Online (Sandbox Code Playgroud)
可以导致"双重评估".有人能给我一个例子,说明何时进行双重评估以及为什么它会变坏?
PS:令人惊讶的是,除了在Clojure中的一个例子(我无法理解)之外,我在google搜索时找不到任何详细的解释.
我搜索了网站,但没有找到我正在寻找的答案,所以这里是一个非常快速的问题.
我想做那样的事情:
#ifdef _WIN32 || _WIN64
#include <conio.h>
#endif
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我知道_WIN32是为32位和64位窗口定义的,所以我可以用于Windows检测.我更感兴趣的是我是否可以使用预处理程序指令这样的逻辑运算符,如果是,如何,因为上述方法不起作用.
用gcc编译我得到:
警告:#ifdef指令结束时的额外令牌,它基本上只需要第一个MACRO并忽略其余的.
我理解如何使用这样的预处理器指令:
#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
在没有进入血腥细节的情况下,我想使用一个#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++ ×5
c ×4
macros ×2
preprocessor ×2
gcc ×1
ios ×1
iphone ×1
objective-c ×1
swift ×1
xcode ×1