Почему мой компилятор не хочет компилировать этот код? - PullRequest
0 голосов
/ 02 июня 2019

Вчера я наткнулся на этот проблемный код, который я хотел понять и исправить. До сих пор я провел некоторые исследования и исправил их, но мне было интересно, есть ли другие способы исправить код?

# include < stdio .h >
# include < stdlib .h >
int * sub ( int * x , int * y) { //return type should be pointer but is address//
int result = y - x ; //integer becomes pointer//
return &result;
}
int main ( void ) {
int x = 1;
int y = 5;
int * result = sub (&x , &y ); //function has addresses as parameters but not pointers//
printf ("% d\n" , * result );
return EXIT_SUCCESS ;
}

Я бы просто удалил все указатели и адреса:

# include < stdio .h >
# include < stdlib .h >
int sub ( int x , int y) {
int result = y - x ;
return result ;
}
int main ( void ) {
int x = 1;
int y = 5;
int result = sub (x , y );
printf ("% d\n" , result );
return EXIT_SUCCESS ;
}

Ответы [ 3 ]

1 голос
/ 02 июня 2019

Просто удалите пробелы внутри и вокруг операторов импорта:

#include <stdio.h>
#include <stdlib.h>

int sub(int x, int y)
{
  int result = y - x;
  return result;
}

int main(void)
{
  int x = 1;
  int y = 5;
  int result = sub(x, y);
  printf("% d\n", result);
  return EXIT_SUCCESS;
}
0 голосов
/ 02 июня 2019

Разыменуйте указатели и сделайте некоторую хитрость с распределением памяти:

#include <stdio.h>
#include <stdlib.h>
int *sub (int *x, int *y) {
    int *result = malloc(sizeof(*result));
    *result = *y - *x;
    return result;
}
int main (void) {
    int x = 1;
    int y = 5;
    int *result = sub(&x, &y);
    printf("%d\n", *result );
    return EXIT_SUCCESS;
}
0 голосов
/ 02 июня 2019

Где вы наткнулись на этот код? Нет необходимости в методе sub, и нет цели для этих указателей, фактически весь этот код является избыточным. Вот это «исправлено»:

#include <stdio.h>

int
main()
{
    printf("4\n");
    return 0;
}

Но это звучит подозрительно, как школьное задание.

...