2

我遇到了这个面试问题。我知道这很棘手,但想不出任何方法。

更改程序,使 printf 的输出始终为20. 只能foo()更改。main()功能无法更改。

   void foo()
   {
       // Add Here
   }

   int main()
   {
      int i = 20;
      foo();
      i = 100;
      printf("%d", i);
      //Some other computation. Doesn't have any printf statements.
      return 0;
   }
4

2 回答 2

2

我们可以使用宏参数来改变 printf 的输出。

void foo()
{
    #define printf(x, y) printf(x, 20);
}

int main()
{
    int i = 20;
    foo();
    i = 100;
    printf("%d", i);
    return 0;
}

通过使用它,期间printf("%d",i)将被映射到宏扩展printf("%d",20)

于 2013-09-29T01:37:35.303 回答
1

foo() 只能打印 20 并调用 exit()。

于 2013-09-29T01:40:25.813 回答