digitalmars.D.learn - fputs, stdout
- Tony (17/17) Nov 06 2017 There is a fputs/stdout in core.stdc.stdio. std.stdio "public
- rikki cattermole (6/31) Nov 06 2017 core.stdc.stdio : stdout
- Jonathan M Davis (9/26) Nov 06 2017 stdout in core.stdc.stdio and stdout in std.stdio are two different thin...
There is a fputs/stdout in core.stdc.stdio. std.stdio "public
imports" that:
"public import core.stdc.stdio;"
Wondering why:
import core.stdc.stdio : fputs;
import core.stdc.stdio : stdout;
void main()
{
fputs( cast(const char *)"hello world\n",stdout);
}
compiles and runs, but if I change the imports to:
import std.stdio : fputs;
import std.stdio : stdout;
I get this compile error:
fputs_test.d(11): Error: function core.stdc.stdio.fputs (scope
const(char*) s, shared(_IO_FILE)* stream) is not callable using
argument types (const(char*), File)
Nov 06 2017
On 07/11/2017 4:34 AM, Tony wrote:
There is a fputs/stdout in core.stdc.stdio. std.stdio "public imports"
that:
"public import core.stdc.stdio;"
Wondering why:
import core.stdc.stdio : fputs;
import core.stdc.stdio : stdout;
void main()
{
fputs( cast(const char *)"hello world\n",stdout);
}
compiles and runs, but if I change the imports to:
import std.stdio : fputs;
import std.stdio : stdout;
I get this compile error:
fputs_test.d(11): Error: function core.stdc.stdio.fputs (scope
const(char*) s, shared(_IO_FILE)* stream) is not callable using argument
types (const(char*), File)
core.stdc.stdio : stdout
https://github.com/dlang/druntime/blob/master/src/core/stdc/stdio.d#L710
std.stdio : stdout
https://github.com/dlang/phobos/blob/master/std/stdio.d#L4662
Answer: not the same thing.
Nov 06 2017
On Tuesday, November 07, 2017 04:34:30 Tony via Digitalmars-d-learn wrote:
There is a fputs/stdout in core.stdc.stdio. std.stdio "public
imports" that:
"public import core.stdc.stdio;"
Wondering why:
import core.stdc.stdio : fputs;
import core.stdc.stdio : stdout;
void main()
{
fputs( cast(const char *)"hello world\n",stdout);
}
compiles and runs, but if I change the imports to:
import std.stdio : fputs;
import std.stdio : stdout;
I get this compile error:
fputs_test.d(11): Error: function core.stdc.stdio.fputs (scope
const(char*) s, shared(_IO_FILE)* stream) is not callable using
argument types (const(char*), File)
stdout in core.stdc.stdio and stdout in std.stdio are two different things.
In core.stdc.stdio it's a FILE*, and in std.stdio it's std.stdio.File.
Basically, core.stdc.stdio gives you the C version, and std.stdio gives you
the D version. However, there is no fputs in std.stdio. Rather, std.stdio
publicly imports core.stdc.stdio. So, it's the same fputs in
core.stdc.stdio, and it expects a FILE*, whereas since you import stdout
from std.stdio, you got the File, not the FILE*. So, they're not compatible.
- Jonathan M Davis
Nov 06 2017









rikki cattermole <rikki cattermole.co.nz> 