我已经学会了
inline ostream & _Cdecl ostream::operator<< (const signed char * _s) {
outstr(_s, (const signed char *)0);
return *this;
}
是如何在iostream.h头文件中声明(重载)插入运算符(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&quot;)我可以使用相同的功能在屏幕上打印字符串值吗?
我试过
#include<iostream.h>
int main() {
outstr("Hello world!", (const signed char *)0);
return 0;
}
最终出错了。我想使用这样的东西,以便看看是否有一些可能的方法来回答这个在屏幕上打印内容而不使用printf,cout或puts()的查询。
更新:如果您有任何建议,我欢迎
#include<stdlib.h>
void main() {
system("echo /"Hello world!/"");
}
注意:如果你能提供可以在没有printf(),cout或puts()的情况下打印的C等效代码,我没有任何限制
答案 0 :(得分:4)
是的,您可以直接调用该函数,但是您的推理是有缺陷的。与执行实际功能所用的时间相比,通过消除对操作员的子程序调用来节省的时间可以忽略不计;这就像关闭汽车的窗户,而敞篷车顶下,以减少雨水。
答案 1 :(得分:3)
进行函数调用所需的时间多,多小于打印字符串所需的时间。您可以(并且通常应该)忽略您可以使用您的方法保存的时间量。
答案 2 :(得分:3)
如果您希望跨所有符合标准的C ++实现的可移植性,您可以通过以下方式将字符串打印到标准输出
const char * str = "Hello World\n";
fprintf(stdout, str);
fputs(str, stdout);
for (int i=0; str[i]!=0; ++i)
putchar(str[i]);
for (int i=0; str[i]!=0; ++i)
putc(str[i], stdout);
for (int i=0; str[i]!=0; ++i)
fputc(str[i], stdout);
fwrite(str, sizeof(*str), strlen(str), stdout);
此外,您还可以使用std::cerr
和std::clog
。他们写信给stderr
而不是stdout
,但从用户的角度来看,这通常是同一个地方:
std::cerr << str;
std::clog << str;
从效率的角度来看,我怀疑这些都会对你有所帮助。为此,您可能希望看一些更具体的平台。对于POSIX系统,请参阅Dave S给出的答案。对于Windows,请参阅this link。
你不应该做的是打开你的头文件并模仿他们使用的东西。至少,不是在中间层,他们在自己的实现中使用不同的各种模糊功能。下一版本可能不存在这些功能。但是,如果你进入最深层次,你会发现特定于操作系统的调用,就像我上面提供的链接中那样。只要您停留在相同的操作系统,甚至操作系统版本之间,这些应该是安全的。
答案 3 :(得分:2)
在UNIX类型系统上,您可以执行以下操作。
#include <unistd.h>
#include <stdio.h>
int main()
{
const char x[] = "Hello World!";
write(STDOUT_FILENO, x, strlen(x)); // Feel free to check the return value.
return 0;
}
我很好奇你做这件事的动机是什么。在信号处理程序之外,我不愿意像这样进入较低级别的呼叫。 I / O的性能将是时间的主要驱动因素,而不是通常相当优化/内联的中间函数调用。
答案 4 :(得分:0)
您可以直接使用系统调用。
http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
例如,这个页面解释了linux系统调用。你可以从我复制的链接开始,使用汇编语言来使用很多方法,或者用另一种方式说出来,不用调用函数来做一些事情。
但我猜这是一个棘手的问题,如果我有一家公司,我绝不会雇用一个使用系统调用而不是函数的人。
这是使用带有标准输出(1)的sys_write(4)的示例。您可以将汇编代码内联到C / C ++代码中。 http://docs.cs.up.ac.za/programming/asm/derick_tut/#helloworld