条件编译可以出现在函数的入口参数中吗?
如:
#define _A_int add(int a,int b,int c)
{
  return (a+b+c);
}void main()
{
  add(1,
      #ifdef _A_
      2,
     #else
      3,
     #endif
     4)
}请问在vc6.0下可以编译通过吗?

解决方案 »

  1.   

    谢谢各位!
    如果是可变参数且是宏定义呢?
    如:#define _A_
    #define ADD(a) add_func a;int add_func(int a,...)
    {
     
    }void main()
    {
      ADD((1,
          #ifdef _A_
          2,
         #else
          3,
         #endif 
         4));
    }这样可以编译通过吗?
      

  2.   

    如下面的程序:
    #define _A_#define ADD(a,b,c) add_func(a,b,c)int add(int a,int b,int c)
    {
    return (a+b+c);
    }void main()
    {
    ADD(1,
    #ifdef _A_
    2,
    #else
    3,
    #endif
    4);
    }在vc6.0可以通过吗?
      

  3.   

    #ifdef _A_
    ADD(1,2,4);
    #else
    ADD(1,3,4);
    #endif程序的可读性增强了
      

  4.   

    呵呵,这是个不错的表述
    可是如果这样呢ADD(
    #ifdef _A_
    1,
    #else
    2,
    #endif
    #ifdef _B_
    3,
    #else
    4,
    #endif
    #ifdef _C_
    5
    #else
    6
    #endif
    );那岂不是要描述多种情况?
      

  5.   

    完全c语言实现。
    在vc6.0下编译不通过,难道真的没有一个合适解释吗?
      

  6.   

    >在vc6.0下编译不通过,难道真的没有一个合适解释吗?
    有。宏是在编译时展开的。也就是
    #define ADD(a,b,c) add_func(a,b,c)ADD(1,
    #ifdef _A_
    2,
    #else
    3,
    #endif
    4);会被展开成为
    add_func(1, #ifdef _A_ 2, #else 3, //...
    编译器会认为你提供了错误的参数表。