C processor error for conio.h

Kabir picture Kabir · Mar 5, 2012 · Viewed 11.4k times · Source
#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;
}

When I run this programme I find the following error:

conio.h: No such file or directory

If delete #include "conio.h" then I find the following error:

Undefined symbols for architecture x86_64:
"_kbhit", referenced from:
_main in cckd1NC4.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

How can I solve this problem? What are reason behind these? Would you please tell me?

Answer

snibu picture snibu · Mar 5, 2012

the double quotes in #include "something.h" means the file something.h is present in the current directory ie where the source file is located. Where as the <> symbols in #include <something.h> means that something.h is present in the standarad library folder ie for example the /usr/include folder. conio.h is a part of the standarad library so you need to use the <> symbols instead of the double quotes. The error you are seeing is because the linker is not able to find the function definition of kbhit() to link with your code to make the binary/executable.