Ответы пользователя по тегу C
  • Перевод из C на Java. Указатели?

    kostik450
    @kostik450
    Вот это место
    int decode(int correct_mode, int *errs, unsigned long *cw)

    сделать так:
    public int[] decode(int correct_mode, int errs, int cw);

    Соответственно внутри функции везде вместо
    *errs и *cs
    сделать без звезд, то есть так:
    errs и cs

    ну и в конце функции, там где return(2), возвращаем так:
    int[] arr = int long[3];
    arr[1]=2;
    arr[1]=errs;
    arr[2]=cs;
    return arr;
    return 0 и return 1 аналогично.

    А вызов оформляем так:
    int[] arr = decode(correct_mode, errs, cw);
    result = arr[0];
    errs = arr[1];
    cw = arr[2];
    Вроде бы ничего не забыл.

    Короче, возвращаем результат в виде массива, а потом десериализируем массив.
    Можно, кстати и изначально в виде массива передавать,
    внутри этот массив «курочить» и возвращать его же как результат.

    А можно и вообще ничего не передавать и не возвращать, все внутри класса, то есть в итоге мы придем к тому, что написал уважаемый Maccimo в варианте a)

    Но если стоит задача тупо переписать код С++ на Java без рефакторинга, то мой метод более идеален.
    Ответ написан
    3 комментария
  • Компиляция программы на C?

    kostik450
    @kostik450
    >Подскажите, как это происходит без заголовочного файла?

    Когда компилятор делает .o файлы, там название функции next будет без манглинга, то есть просто _next
    И когда ld (он же линкер) собирает из двух .o в один исполняемый файл то будет всё Ок.

    А если делать на С++ (он же g++) этот фокус не пройдет, потому что там будет манглинг имен и в одном .o файле получится типа _next@gcvd а в другом _next@vdsf и линкер это не соберёт. Хотя на С++, похоже, компилятор тоже ругнется, что встретил девушку полумесяцем бровь функцию без заголовка.
    Ответ написан
    Комментировать