Ошибка C при использовании вызовов GLFW

#c #glfw

#c #glfw

Вопрос:

Недавно я учился программировать на c , но столкнулся с проблемой при использовании GLEW и GLFW.

Источник (.cpp):

 #include<iostream>
#define GLEW_STATIC
#include "GLEW/glew.h"
#include <GLFW/glfw3.h>

int main(){
    std::cout<<"test";

    GLFWWindow* window;
    window = glfwCreateWindow(800,600,"Test", glfwGetPrimaryMonitor(),NULL);

    return 0;
}
 

Эта программа компилируется без ошибок, но при ее запуске выходные данные не генерируются, несмотря на std::cout . Однако, как только вызов glfwCreateWindow закомментирован, программа показывает результат, который она должна.

Я крайне смущен этим и хотел бы знать, могу ли я что-нибудь сделать, чтобы это исправить.

РЕДАКТИРОВАТЬ: я сомневаюсь, что это проблема с std::cout, потому что, когда я пытаюсь показать окно таким образом, я по-прежнему не получаю ответа от программы.

 glfwShowWindow(window);
while(!glfwWindowShouldClose(window))glfwPollEvents();
glfwDestroyWindow(window);
 

РЕДАКТИРОВАТЬ 2:
Вот мой код на данный момент:

 #define GLEW_STATIC
#include "GLEW/glew.h"
#include <GLFW/glfw3.h>
#include <iostream>

int main(){
    std::cout<<"test" << std::endl;
    glfwInit();

    GLFWwindow* window;
    window = glfwCreateWindow(800,600,"TEST", NULL, NULL);

    glfwShowWindow(window);
    while(!glfwWindowShouldClose(window))glfwPollEvents();
    glfwDestroyWindow(window);
    glfwTerminate();
    std::cin.get();
}
 

ПРАВКА 3: Заголовок

РЕДАКТИРОВАТЬ 4: После некоторых экспериментов я обнаружил, что любое упоминание о вызове glfw в исходном файле, похоже, препятствует запуску программы. Следующее не генерирует никаких выходных данных:

 int main(){
    std::cout<<"test" << std::endl;

    std::cout.flush();

    std::cin.get();
}
void test(){
    glfwInit();

    GLFWwindow* window;
    window = glfwCreateWindow(800,600,"TEST", NULL, NULL);

    glfwShowWindow(window);
    while(!glfwWindowShouldClose(window))glfwPollEvents();
    glfwDestroyWindow(window);
    glfwTerminate();

}
 

Комментарии:

1. Перенаправьте вывод вашей программы в файл. Похоже, у вас просто недопонимание с вашим эмулятором терминала, а не с C .

2. Попробуйте завершить вывод новой строкой. Вероятно, вы просто не замечаете вывод, потому что он находится в той же строке, что и ваше приглашение.

3. std::cout<<«test»<<std::endl; кажется, не имеет значения. Мне еще предстоит попробовать перенаправление на файл.

4. Возможно, вызовите необходимый код для завершения glfw программы: glfwTerminate()

5. @mr5 Похоже, что программа даже не выполняет метод main() в первую очередь.

Ответ №1:

Некоторые причины отсутствия вывода на stdout :

  • Если вы работаете в Windows, ваша программа, возможно, была скомпилирована в подсистеме Windows. Затем любая печать stdout будет отправлена в bitbucket. Если вы используете набор инструментов MinGW, это контролируется флагом -mwindows компоновщика
  • Если программа выходит из строя, то буферизованный вывод может быть не записан. Поэтому попробуйте очистить выходной поток, прежде чем делать что-либо еще. Обратите внимание, что программы могут аварийно завершать работу.

Некоторые вещи, которые вы можете спросить, чтобы узнать больше:

  • Что происходит, когда вы пошагово просматриваете свой код с помощью отладчика, поставляемого с вашим компилятором?
  • Поскольку glfwCreateWindow вывод скрыт, возможно, он выходит из строя внутри этой функции. Вы передали правильные аргументы?
  • glfwCreateWindow Возвращает ли действительный указатель?

Комментарии:

1. Я внес некоторые изменения, которые могут дать более полное представление о проблеме

Ответ №2:

У меня была такая же проблема, когда я просматривал документацию для glfwCreateWindow(), Указано, что вы должны вызывать glfwCreateWindow() только в основной функции.

Документация

попробуйте передать glfwCreateWindow в качестве параметра для test()