首页 > 解决方案 > C 错误:int 之前的预期表达式(当我调用该函数时,我得到一个表达式丢失的错误)

问题描述

我收到一些表达式丢失的错误

#include <stdio.h>
void pairmul(int* p,int n,int sum){
int arr[n];
int q;
for(int i =0; i<=n-1; i++){
    arr[i] = *(p+i);
}
for(int j = 0;j<=n-1;j++){
    for(int k=j+1;k<=n-1;k++){
        int temp;
        if(arr[j]>arr[k]){
            temp = arr[k];
            arr[k] = arr[j];
            arr[j] = temp;
        }
    }
}
if(arr[0]+ arr[1]<sum){
    q = arr[0]*arr[1];
    printf("%d",q);
}
else if(n<2){
    printf("-1");
}
else{
    printf("0");
}
return 0;

}

int main(){
     int sum,n;
     int array[n];
     printf("Sum and Size of array");
     scanf("%d %d \n",&sum,&n);
     for(int i =0; i<=n-1; i++){
         scanf("%d",&array[i]);
}
pairmul(&array[0], int n,int sum);
return 0;
}

pairmul(&array[0], int n,int sum);

我对这个表达式有错误,即参数很少,第二个是“int”之前有一些表达式

标签: c

解决方案


你能回忆起函数的语法吗?

func(var1, var2, var3);

正确的?但是在您的代码pairmul(&array[0], int n,int sum);中,您使用以下语法:

func(var1, datatype var2, datatype var3);

这是没有意义的。改变

pairmul(&array[0], int n,int sum);

进入

pairmul(&array[0], n,sum);

您的代码将正常工作。

我认为您感到困惑的原因是因为可能被宏之类的功能所困惑。例如。

#define MAKE_SQUARE_AND_STORE(datatype, var, num) datatype var = num * num 

int main() {
    MAKE_SQUARE_AND_STORE(int, square, 3);
    printf("%d\n", square);
}

这是有效的,因为宏替换了文本,所以这段代码实际上被转换为:

int main() {
    int square = 3 * 3;
    printf("%d\n", square);   
}

这段代码被输入到实际的编译器中。像宏这样的函数是另一回事。

这是一个更疯狂的宏:

#define DECLARE_SQUARE(dec, num) dec = num * num

在这种情况下,你奇怪的语法有效。

DECLARE_SQUARE(int sqr, 3);
/*Preprocesses into:
int sqr = 3 * 3; */

不要混淆我的宏,宏有奇怪的语法,因为它们首先被送入预处理器而不是直接送入实际的真正编译器。宏可以有任何语法。正确的 C 函数具有明确的语法。使用明确的语法,不要忘记它。


推荐阅读