Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 12, 2004 Something wrong in std.c.stdio.d Linux version | ||||
---|---|---|---|---|
| ||||
//program 1.d import std.c.stdio; void main() { printf("Press a key to continue...\n"); char a = getchar(); printf("Ok\n"); } compile and run ok... but import std.c.stdio; void main() { printf("Press a key to continue...\n"); char a = getch(); printf("Ok\n"); } output: gcc 1.o -o 1 -g -lphobos -lpthread -lm 1.o(.gnu.linkonce.t_Dmain+0xf): En la función `_Dmain': : undefined reference to `getch' collect2: ld devolvió el estado de salida 1 some functions in stdio.d not in Linux, like: int getch(); int getche(); int kbhit(); I can find getch() at curses.h no match for getche() and kbhit()...... I think that functions may be declared in the way: version (Win32) { int getch(); int getche(); int kbhit(); } Is that correct? regards Julio Jiménez |
March 12, 2004 Re: Something wrong in std.c.stdio.d Linux version | ||||
---|---|---|---|---|
| ||||
Posted in reply to Julio Jiménez | Probably you'll need to link against libncurses.a. "Julio Jiménez" <jujibo@inicia.es> escribió en el mensaje news:c2s0nk$5o1$1@digitaldaemon.com... > > //program 1.d > > import std.c.stdio; > > > void main() > { > printf("Press a key to continue...\n"); > char a = getchar(); > printf("Ok\n"); > } > > compile and run ok... > > but > > import std.c.stdio; > > > void main() > { > printf("Press a key to continue...\n"); > char a = getch(); > printf("Ok\n"); > } > > output: > > gcc 1.o -o 1 -g -lphobos -lpthread -lm > 1.o(.gnu.linkonce.t_Dmain+0xf): En la función `_Dmain': > : undefined reference to `getch' > collect2: ld devolvió el estado de salida 1 > > some functions in stdio.d not in Linux, like: > > int getch(); > int getche(); > int kbhit(); > > I can find getch() at curses.h no match for getche() and kbhit()...... > > I think that functions may be declared in the way: > > version (Win32) > { > int getch(); > int getche(); > int kbhit(); > } > > Is that correct? > > > regards > > > Julio Jiménez > |
March 12, 2004 Re: Something wrong in std.c.stdio.d Linux version | ||||
---|---|---|---|---|
| ||||
Posted in reply to news.digitalmars.com | news.digitalmars.com wrote:
> Probably you'll need to link against libncurses.a.
>
>
Yes, I know it... (I can use any C library writing my own interface). But that's not what i'm talking...
int getch();
int getche();
int kbhit();
Not defined in linux stdio.h and are included in std.c.stdio. That's why i suggest to define only for windows version
regards
Julio Jiménez
|
March 12, 2004 Re: Something wrong in std.c.stdio.d Linux version | ||||
---|---|---|---|---|
| ||||
Posted in reply to Julio Jiménez | I'd wondered about that myself some time ago. Didn't come up with any conclusion though ... "Julio Jiménez" <jujibo@inicia.es> wrote in message news:c2sfnv$v97$1@digitaldaemon.com... > news.digitalmars.com wrote: > > Probably you'll need to link against libncurses.a. > > > > > > Yes, I know it... (I can use any C library writing my own interface). But that's not what i'm talking... > > int getch(); > int getche(); > int kbhit(); > > Not defined in linux stdio.h and are included in std.c.stdio. That's why > i suggest to define only for windows version > > regards > > Julio Jiménez > |
March 13, 2004 Re: Something wrong in std.c.stdio.d Linux version | ||||
---|---|---|---|---|
| ||||
Posted in reply to Matthew | It has been a long time since the last time I programmed something in C for windows/dos, but the functions getch(), getche() and kbhit() were always declared in a compiler specific conio.h and not in stdio.h. The C standard does not include those functions in stdio.h. In curses or ncurses for unix there are equivalent functions, but they do not necessarily have the same names and certainly they aren't in stdio.h. In article <c2sj04$1503$1@digitaldaemon.com>, Matthew says... > >I'd wondered about that myself some time ago. Didn't come up with any >conclusion though ... > >"Julio Jiménez" <jujibo@inicia.es> wrote in message news:c2sfnv$v97$1@digitaldaemon.com... >> news.digitalmars.com wrote: >> > Probably you'll need to link against libncurses.a. >> > >> > >> >> Yes, I know it... (I can use any C library writing my own interface). But that's not what i'm talking... >> >> int getch(); int getche(); int kbhit(); >> >> Not defined in linux stdio.h and are included in std.c.stdio. That's why >> i suggest to define only for windows version >> >> regards >> >> Julio Jiménez >> > > Fuera Chávez |
March 13, 2004 Re: Something wrong in std.c.stdio.d Linux version | ||||
---|---|---|---|---|
| ||||
Posted in reply to lord.vegeta | lord.vegeta@ica.luz.ve wrote:
> It has been a long time since the last time I programmed something in C for
> windows/dos, but the functions getch(), getche() and kbhit() were always
> declared in a compiler specific conio.h and not in stdio.h. The C standard does
> not include those functions in stdio.h. In curses or ncurses for unix there
> are equivalent functions, but they do not necessarily have the same names and
> certainly they aren't in stdio.h.
Ok correct, those functions are in conio.h for windows/dos C compiler, but that's not the quiestion. (we are not talking about one or more functions are in stdio.h conio.h bio.h.....)
The fact is that we can use wrongly those functions in D under linux and that is wrong, as they are defined in module std.c.stdio for both versions (Linux and Windows). Those functions are not in Linux Standard Library.... there are some equivalent functions in curses library. But really in Linux don't need those functions. Linux is POSIX compliance, a keyboard is a device an i can read and write from devices (any device... not only keyboard) in another standard ways.
I think the correct is issolate those functions under the version(windows) {...} or implement equivalent functions for linux version in phobos.
In DMD 0.81 i can write this program:
-----exaple.d------
import std.c.stdio;
void main()
{
printf("Press a key to continue...\n");
char a = getch();
printf("Ok\n");
}
------------------
and complie ok under linux and windows, but the linker fails in linux version because getch() is not in linux standard library.
That's simply wrong
regards
Julio
|
Copyright © 1999-2021 by the D Language Foundation