programing

경고는 많지만 내 프로그램은 정상적으로 작동한다.

nicescript 2023. 2. 2. 21:20
반응형

경고는 많지만 내 프로그램은 정상적으로 작동한다.

warning: assignment makes pointer from integer without a cast [-Wint-conversion]
warning: return makes integer from pointer without a cast [-Wint-conversion]
    #include<stdio.h>  

    long int jumlah(long int a,long int b, long int * sum){
        sum = (a+b);
        return (sum);
    }

    int main(){
        long int a,b,sum;
        scanf("%d %d",&a,&b);
        sum = jumlah(a,b,&sum);
        printf("%d\n",sum);
        return 0;
    }

프로그램은 정상적으로 동작하지만 기능 내의 모든 것에 경고가 표시되며 그 이유를 알고 싶습니다.

jumlah 함수에서는 SUM 포인터가 가리키는 변수에 액세스하려면 SUM 포인터를 참조 해제해야 합니다.long ints 형식 지정자는 "%ld"입니다.

#include <stdio.h>

long int jumlah(long int a, long int b, long int *sum)
{
    *sum = a+b;
    return *sum;
}

int main(void)
{
    long int a, b, sum;
    scanf("%ld %ld", &a, &b);
    sum = jumlah(a, b,&sum);
    printf("%ld\n", sum);
    return 0;
}
long int jumlah(long int a,long int b, long int * sum){
    sum = (a+b);
    return (sum);
}

sum에 대한 포인터입니다.long int. 유형 포인터의 값만 할당할 수 있습니다.long int하게.(a+b)type 값을 반환합니다.long int결과를 에 할당하려면 ,sum먼저 다음과 같이 참조를 해제해야 합니다.*sum = (a+b);

함수 반환 유형은 다음과 같습니다.long int, 그러나 다시sum포인터 타입이기 때문에 다음 중 하나를 반환하면 큰 차이가 납니다.sum또는*sum하나는 주소가 되고 다른 하나는 해당 주소에 저장되어 있는 값이 됩니다.

해당 함수의 반환 유형을 다음과 같이 변경하십시오.long int*및 반환sum(값 대신 주소를 반환하고 싶지만 그렇지 않은 경우에만 해당) 또는 참조를 취소하여 값을 반환한다.*sum함수에서 가져옵니다.

질문의 코멘트에 기재한 바와 같이, 당신은 포인터를 잘못 사용하고 있습니다.sum로서long int스토리지 타입.

이것은 불필요하게 복잡하다.간단히 하자. (좋은 코드는 날카롭다.)

long int jumlah( long int a, long int b ) {
    return a + b;
}

int main(){
    long int a, b;

    // make use of return values from system (input) functions
    if( scanf( "%d %d", &a, &b ) == 2 )
        printf( "%d\n", jumlah( a, b ) );
    else
        printf( "Input error\n" );

    return 0;
}

프로그램이 예상대로 작동할 수 있지만, 긴 정수를 긴 포인터에 채우고 있습니다(합계속해서 긴 포인터가 아니라 긴 포인터(합계)잘못된 타입이지만, 딱 맞아떨어집니다.기본적으로 다음과 같이 sum 파라미터를 로컬로 정의된 변수로 사용합니다.

long int jumlah(long int a,long int b){
long int sum;

sum = a + b;
return (sum);

}

main()에서는 jumlah()로부터의 반환을 합계에 저장하기 때문에 ersatz local 변수를 제공하는 대신 &sum을 전달해도 큰 효과가 없습니다.결과를 (반환과 더불어) 합계로 저장하는 경우 jumlah()는 다음과 같습니다.

long int jumlah(long int a,long int b, long int * sum){
*sum = a + b;
return (*sum);

}

컴파일러 경고는 항상 오류로 처리하여 수정하십시오.

언급URL : https://stackoverflow.com/questions/73598415/bunch-of-warnings-but-my-program-works-fine

반응형