我有一个看起来像这样的代码,并且执行得很好,
MSBuild:UpdateGeneratedFiles
我的问题是,我们可以在不定义函数原型的情况下定义函数吗?函数如何返回两个值?
答案 0 :(得分:3)
我们可以在之后定义函数而不在顶部定义函数原型吗?
您可以在main
中声明其原型。在您的情况下,该函数接受int
并返回一个int
,因此默认的原型(它们在Standard中是否还存在?)可以正常工作。
函数如何返回两个值?
它可以返回一个结构按值:
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;
}
它可以在堆上返回一个新数组:
/* 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;
}
最后,它可以返回一个数组,而无需在堆上分配后者:
/* 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;
}
在这种情况下,可以通过后续调用重用(重写)返回的数组,因此您应尽快使用其内容。