相关疑难解决方法(0)

如何使C++宏像函数一样?

让我们说由于某种原因你需要写一个宏:MACRO(X,Y). (我们假设您有一个很好的理由不能使用内联函数.) 您希望此宏模拟对没有返回值的函数的调用.


示例1:这应该按预期工作.

if (x > y)
  MACRO(x, y);
do_something();
Run Code Online (Sandbox Code Playgroud)

示例2:这不应导致编译器错误.

if (x > y)
  MACRO(x, y);
else
  MACRO(y - x, x - y);
Run Code Online (Sandbox Code Playgroud)

实施例3:这应该编译.

do_something();
MACRO(x, y)
do_something();
Run Code Online (Sandbox Code Playgroud)

编写宏的天真方式是这样的:

#define MACRO(X,Y)                       \
cout << "1st arg is:" << (X) << endl;    \
cout << "2nd arg is:" << (Y) << endl;    \
cout << "Sum is:" << ((X)+(Y)) << endl;
Run Code Online (Sandbox Code Playgroud)

这是一个非常糟糕的解决方案,它失败了所有三个例子,我不应该解释原因.

忽略宏实际上做的事情,这不是重点.


现在,我经常看到编写宏的方法是将它们用大括号括起来,如下所示:

#define MACRO(X,Y)                         \
{                                          \
  cout << "1st arg is:" << …
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

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

GCC/Clang 中这个奇怪的表达是什么?

我最近注意到GCC/Clang中有一个奇怪的有效C/C++表达式,这是我以前从未见过的。这是C++中的示例,但类似的表达式也适用于C

int main(){
    int z = 5;
    auto x = ({z > 3 ? 3 : 2;}); // <-- expression
    std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)

它的作用在某种程度上是显而易见的,但我想知道它叫什么。由于它在MSVC中不值得,我猜它是一个非标准扩展。但是有什么东西也适用于MSVC吗?特别是在C

c c++ gcc-statement-expression

3
推荐指数
1
解决办法
513
查看次数

标签 统计

c++ ×2

c ×1

c-preprocessor ×1

gcc-statement-expression ×1