与宏同名的函数

Fer*_*rdy 16 c c++ puzzle

#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}

int main()
{
 /* call f : function */
}
Run Code Online (Sandbox Code Playgroud)

怎么叫f(功能)?写作f(3)不起作用,因为它被替换为{}

Pra*_*rav 16

有用(f)(3);吗?

C预处理器不会扩展f内部宏( ).


  • 我不同意这是愚蠢的.这是任何打算使用预处理器的C程序员应该知道的技术. (4认同)
  • @Prasoon:把这个问题称为"愚蠢"的傲慢.只因为你知道答案,不会让它"愚蠢". (4认同)
  • 因为宏f需要采用f(某种形式)的形式,以便C预处理器进行替换. (2认同)

iam*_*ind 7

int main()
{
#undef f  // clear f!
 f(3);
}
Run Code Online (Sandbox Code Playgroud)

  • +1写一个正确的答案,可能会惹恼面试官! (4认同)