相关疑难解决方法(0)

什么是C宏有用?

我已经写了一点C,我可以很好地阅读它以大致了解它在做什么,但每次我遇到一个宏它都完全抛弃了我.我最终必须记住宏是什么,并在我阅读时将其替换为我的脑袋.我遇到的那些直观且易于理解的东西总是像迷你小功能一样,所以我总是想知道为什么它们不仅仅是功能.

我可以理解在预处理器中为调试或跨平台构建定义不同构建类型的需要,但是定义任意替换的能力似乎只对使得已经很难理解的语言更加难以理解.

为什么为C引入了如此复杂的预处理器?并且有没有人有一个使用它的例子,这将使我理解为什么它似乎仍然用于除了简单的#debug风格条件编译之外的目的?

编辑:

读了很多答案之后我还是不明白.最常见的答案是内联代码.如果内联关键字没有这样做,那么它有充分的理由不这样做,或者实现需要修复.我不明白为什么需要一个完全不同的机制,这意味着"真正内联这个代码"(除了形成内联之前编写的代码).我也不明白提到"如果它太愚蠢而不能被赋予功能"的想法.当然,任何需要输入并产生输出的代码都最好放在一个函数中.我想我可能没有得到它,因为我不习惯编写C的微观优化,但预处理器只是对一些简单问题的复杂解决方案.

c macros language-features language-design c-preprocessor

72
推荐指数
9
解决办法
4万
查看次数

跨平台宏用于静默未使用的变量警告

在将大量C++代码从Visual Studio(2008)移植到Xcode(4.4+)时,我会遇到如下行:

UNUSED_ALWAYS(someVar);
Run Code Online (Sandbox Code Playgroud)

UNUSED_ALWAYS(x)(通过UNUSED(x))宏扩展到x这似乎沉默的Visual C++就好了.但这对Clang来说还不够.

对于Clang,我通常使用该#pragma unused x指令.

UNUSED_ALWAYSUNUSED宏在人工定义windows.h这是我控制包含了一些工具来帮助的Xcode编译的Windows的东西头.

有没有办法定义UNUSED(x)扩展到#pragma unused x?我试过这个,Clang没有接受:

#define UNUSED(x) #pragma unused(x)
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

#define UNUSED(x) (void)(x)
Run Code Online (Sandbox Code Playgroud)

这似乎有效.我错过了什么吗?

c++ xcode clang suppress-warnings visual-c++

8
推荐指数
2
解决办法
6127
查看次数