我偶然发现了一段奇怪的代码,我认为它不会按预期的方式工作,但它确实如此。例:
#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
看到区别了吗?