Ошибка процессора C для conio.h
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define RANGE(i, min, max) (i<min) || (i>max) ? 1: 0
int main (void )
{
int r;
do
{
do{
r=rand();
} while (RANGE(r, 1, 100));
printf("%d", r);
}
while (!kbhit());
return 0;
}
Когда я запускаю эту программу, я нахожу следующую ошибку:
conio.h: нет такого файла или каталога
Если удалить #include "conio.h"
тогда я нахожу следующую ошибку:
Неопределенные символы для архитектуры x86_64:
"_kbhit", ссылка на которую:
_main в cckd1NC4.o
ld: символы не найдены для архитектуры x86_64
collect2: ld вернул 1 статус выхода
Как я могу решить эту проблему? Каковы причины этого? Не могли бы вы сказать мне?
3 ответа
В C # включите <lib.h>
отличается от #include "lib.h". Первый поиск файлов заголовков в системах включает путь, а второй в файлах включает путь
conio.h
старый DOS-заголовок, почти никогда не используемый. Такая же функциональность теперь в curses.h
, Убедитесь, что curses (или ncurses) установлены на вашем компьютере, и попробуйте
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
Для чего это стоит, RANGE
определяется слишком мало скобок;
#define RANGE(i, min, max) (i<min) || (i>max) ? 1: 0
Были бы проблемы с чем-то вроде
if(!RANGE(i, 100 200))
Который станет (добавлены паренсы для ясности)
(!(i<100)) || (i>200)
Что не то, что вы хотите. Определите это как
#define RANGE(i, min, max) (((i)<(min)) || ((i)>(max)))
И, прочитайте на Макро Подводные камни.
Двойные кавычки в #include "something.h"
означает файл something.h
присутствует в текущем каталоге, т.е. где находится исходный файл. Где в качестве символов <> #include <something.h>
означает, что что-то.h присутствует в папке библиотеки Standarad, например, /usr/include
папка. conio.h является частью стандартной библиотеки, поэтому вам нужно использовать символы <> вместо двойных кавычек. Вы видите ошибку, потому что компоновщик не может найти определение функции kbhit()
связать с вашим кодом, чтобы сделать двоичный файл / исполняемым.