括号中函数名称的有用性不包括参数

  • 本文关键字:有用性 不包括 参数 函数 c
  • 更新时间 :
  • 英文 :


我偶然发现了一段奇怪的代码,我认为它不会按预期的方式工作,但它确实如此。例:

#include  <stdio.h>
#include <stdlib.h>
int main(void)
{
    printf("%dn", abs(-1)); // output: 1
    printf("%dn", (abs)(-1)); // output: 1
    return 0;
}

显然,在函数调用中的函数名称周围加上括号对程序没有影响。它只是让它看起来像一个演员。

如果以某种方式定义这一点,我有点感兴趣。但我认为它只是不被禁止,这就是它起作用的原因。

我真正好奇的是,这种符号是否可能产生任何优势?(代码的结构,可读性,任何可能有用的东西(

或者这只是一种"奇怪"的代码编写方式?

尝试

int foo(int a, int b) { return a+b; }
#define foo(a,b) ((a)+(b)+1)
#include <stdio.h>
int main() {
    printf("%d %dn",
        foo(3, 5),  // Use macro if defined
        (foo)(3, 5)  // Always call function even if there's a macro
    );
    return 0;
}

输出:

9 8

看到区别了吗?

最新更新