可以在main()之后定义一个函数吗?

时间:2018-10-27 06:07:37

标签: c function return return-value

我有一个看起来像这样的代码,并且执行得很好,

MSBuild:UpdateGeneratedFiles

我的问题是,我们可以在不定义函数原型的情况下定义函数吗?函数如何返回两个值?

1 个答案:

答案 0 :(得分:3)

  

我们可以在之后定义函数而不在顶部定义函数原型吗?

您可以在main中声明其原型。在您的情况下,该函数接受int并返回一个int,因此默认的原型(它们在Standard中是否还存在?)可以正常工作。

  

函数如何返回两个值?

  1. 它可以返回一个结构按值:

    typedef struct { int first; int second; } int_pair;
    int_pair addmult(int x, int y) {
        return (int_pair){42, 314}; /* enough for the demo, lol (c) */
    }
    

    或按指针:

    int_pair *addmult(int x, int y) {
        int_pair *retVal = malloc(sizeof(int_pair));
        return retVal->first = 42, retVal->second = 314, retVal;
    }
    int_pair *multadd(int x, int y) {
        static int_pair retVal{314, 42};
        return &retVal;
    }
    
  2. 它可以在堆上返回一个新数组:

    /* 1. It is user's responsibility to free the returned pointer. */
    int *addmult(int x, int y) {
        int *retVal = malloc(2 * sizeof(int));
        return retVal[0] = 42, retVal[1] = 314, retVal;
    }
    
  3. 最后,它可以返回一个数组,而无需在堆上分配后者:

    /* 1. It is user's responsibility to NEVER free the returned pointer. */
    int *addmult(int x, int y) {
        static int retVal[] = {42, 314};
        return retVal;
    }
    

    在这种情况下,可以通过后续调用重用(重写)返回的数组,因此您应尽快使用其内容。