경고는 많지만 내 프로그램은 정상적으로 작동한다.
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
'programing' 카테고리의 다른 글
왜 PHP json_encode 함수는 UTF-8 문자열을 16진수 엔티티로 변환합니까? (0) | 2023.02.02 |
---|---|
재료 디자인 네비게이션 드로어의 햄버거 아이콘 색상 변경 방법 (0) | 2023.02.02 |
jQuery 확인란이 상태 변경 이벤트 선택됨 (0) | 2023.02.02 |
SQL이 테이블의 값을 다른 테이블에서 바꿉니다. (0) | 2023.02.02 |
먼저 특정 필드 값으로 정렬 (0) | 2023.02.02 |