Ошибка процессора C для conio.h - PullRequest
1 голос
/ 05 марта 2012
#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 ]

4 голосов
/ 05 марта 2012

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)))

И, прочитайте Макро-ловушки .

4 голосов
/ 05 марта 2012

двойные кавычки в #include "something.h" означают, что файл something.h присутствует в текущем каталоге, то есть там, где находится исходный файл. Где в виде символов <> в #include <something.h> означает, что что-то присутствует в папке стандартной библиотеки, например, в папке /usr/include. conio.h является частью стандартной библиотеки, поэтому вам нужно использовать символы <> вместо двойных кавычек. Ошибка, которую вы видите, заключается в том, что компоновщик не может найти определение функции kbhit(), чтобы связать его с вашим кодом, чтобы сделать двоичный файл / исполняемым.

3 голосов
/ 05 марта 2012

в C #include <lib.h> отличается от #include "lib.h". Первый поиск файлов заголовка в системах включает путь, а второй в файлах включает путь

...