Как очистить выходной буфер с помощью LLVM javacpp?Как выполнить fflush, используя LLVM javacpp? - PullRequest
0 голосов
/ 24 ноября 2018

Я использую этот javacpp для сборки компилятора с LLVM на Java.Я смог сгенерировать код для ввода и вывода.

INPUT: Сначала у меня есть LLVMValueRef, который является символом, скажем, целевая переменная, которая будет получать входные данные.Тогда у меня есть LLVMValueRef, который является функцией scanf.Я устанавливаю аргументы и создаю функцию, передающую вызов тогда.Это работает просто отлично.

    LLVMValueRef valueRef = symbol.getLlvmValueRef();
    LLVMValueRef scanfFunction = LLVMGetNamedFunction(moduleRef, "scanf");
    LLVMValueRef[] scanfArgs = { str, valueRef };
    LLVMBuildCall(builderRef, scanfFunction, new PointerPointer(scanfArgs), 2, "scanf");

ВЫХОД: Точно так же я могу распечатать любую строку, какую захочу.У меня есть printt, который я могу получить с помощью LLVMGetNamedFunction, и после этого я создаю вызов fuction, передавая все аргументы, составляющие строку для печати. ​​

    LLVMValueRef printFunction = LLVMGetNamedFunction(moduleRef, "printf");
    LLVMBuildCall(builderRef, printFunction, new PointerPointer(args), printArgs.size(), "printf");

МОЯ ПРОБЛЕМА:

ЕслиУ меня есть printf перед scanf, scanf всегда на первом месте.Я думаю, что это имеет что-то с буфером, похожим на эту проблему: C / C ++ printf () перед выпуском scanf ()

Поэтому я пытался fflush после сборки каждый вызов printf.Например:

    LLVMValueRef[] fflushArgs = { LLVMConstNull(LLVMPointerType(LLVMInt8Type(), 0)) };
    LLVMValueRef fflushFunction = LLVMGetNamedFunction(moduleRef, "fflush");
    LLVMBuildCall(builderRef, fflushFunction, new PointerPointer(fflushArgs), 1, "fflush");

Я собираюсь вызвать fflush (null).

Однако я получаю эту ошибку:

LLVM ERROR: Попытка выполнить неизвестный внешнийфункция: fflush

Итак, у меня есть доступ к printf и scanf, но я не могу использовать fflush

Как я могу использовать FFLUSH?Есть ли другой способ очистить этот буфер?Что я могу сделать, чтобы printf и scanf выполнялись в правильном порядке?Спасибо за вашу помощь.

...