相关疑难解决方法(0)

没有汇编的C/C++函数定义

我一直认为printf()在最后一步中使用内联汇编定义函数.在stdio.h的内部深处埋藏了一些asm代码,它实际上告诉CPU要做什么.例如,在dos中,我记得它是通过首先mov将字符串的开头添加到某个内存位置或寄存器而不是调用intterupt来实现的.

但是,由于Visual Studio的x64版本根本不支持内联汇编程序,因此我想知道在C/C++中根本不会有汇编程序定义的函数.库函数如何printf()在不使用汇编代码的情况下在C/C++中实现?什么实际执行正确的软件中断?谢谢.

c++ inline-assembly

70
推荐指数
5
解决办法
9493
查看次数

c/c ++函数的源代码

我想看一下不同C/C++函数的实现(比如strcpy,stcmp,strstr).这将有助于我了解c/c ++中的良好编码实践.你能告诉我在哪里可以找到它吗?

谢谢.

c c++

20
推荐指数
5
解决办法
2万
查看次数

了解printf的硬件

我想知道是否有任何可用的在线资源解释了什么事情,比如printf of C,它解释了在非常低级别发生的事情(BIOS /内核调用)

c hardware

12
推荐指数
2
解决办法
6527
查看次数

C:如何编写像printf这样的函数

我学会了使用库stdarg.h来获取具有未知数量参数的函数.这是一个简单的函数如何使用:

void print(int args,...){
    va_list ap;
    va_start(ap, args);
    int i = 0;
    for(i=0; i<args; i++){
        printf("%d\n",va_arg(ap, int));
    }
    va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)

基于上面的代码,有两个主要的约束,我不知道如何printf 克服:

1)固定数量参数:意思是,在几乎vardiac函数中,你需要包含args的数量.但是当我写作时printf,我不必包括这个数字.我以为在printf真正使用参数之前,它已经计算了之前的参数数量(通过计算第一个字符串中的数字%).但同样,我认为这个解决方案有点效率不高.它必须通过三个pharses:计算参数数量,并将这些参数放入堆栈,最后将所有参数放入屏幕.

2)所有参数必须具有相同的类型: 如下所示:printf("%d\n",va_arg(ap, int));.因此,列表中的每个参数都必须具有相同的类型.而且正如我们所知,这不是printf中必须的.您可以使用整数或字符串打印double.如果我们将所有这些视为一个字符串,那么这一行应该是错误的,因为错误的语法:

printf("%d",4); //4 cannot treat by string
printf("%d",'4'); // :)) I think this line is better
Run Code Online (Sandbox Code Playgroud)

请帮我解释一下上面两个问题.

c variadic-functions

2
推荐指数
1
解决办法
8462
查看次数

'printf'原理

我想知道的是编译器和程序是如何工作的.

例如,在'Hello,world!' 比方说,例如hello.c,就像每个人都知道的那样:(使用GNU gcc)

$ gcc -o hello hello.c
$ ./hello
Run Code Online (Sandbox Code Playgroud)

你好,世界!

我刚刚得到一个问题,如何printf定义或使用最简单和熟悉的功能之一.

为了自己找到答案,我发现整个头文件包含在stdio.h中,并包含在包含的文件中,包括在包含的文件中.stdio.h中包含近80个头文件.我查找每个文件是否包含"printf"一词.有3个头文件.

stdio.h(本身)

比特/ stdio2.h

比特/ STDIO-ldbl.h

我完全不了解预处理器语法,但我很确定这些文件中的文本不足以定义该printf函数.例如,在stdio.h中,printf大致如下所示:

...
namespace std{
...
extern int printf (const char *__restrict__format, ...);
...
}
...
Run Code Online (Sandbox Code Playgroud)

我知道它说的是语法和声明,但我认为它不是定义或构建的printf.

所以我认为内心深处有一些东西可以回答我的问题,我希望你们中的一些人有一个问题.

c gcc c-preprocessor

2
推荐指数
1
解决办法
283
查看次数

模仿printf

以下代码有什么问题?我们如何使print()函数作为printf工作?

#include <stdio.h>
#include<stdarg.h>

void print(char *format,...)
{
    va_list args;
    va_start(args,format);
    printf(format,args);
}

int main() {
   print("%d %s",5,"le");
}
Run Code Online (Sandbox Code Playgroud)

c printf

0
推荐指数
1
解决办法
320
查看次数

C程序Printf函数显示unsigned long long类型的异常行为?

请考虑以下程序并观察输出.

#include <stdio.h>
int main()
{
    unsigned long long val ;
    val =144111444250;
    printf ("%llu\n", val);
    printf ("%u %llu\n",val, val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

   144111444250

   33 10211385600662044705
Run Code Online (Sandbox Code Playgroud)

在第一个printf中使用%llu会得到正确的结果,但在第二个printf中使用%llu会得到错误的结果.

c unix printf solaris

-1
推荐指数
1
解决办法
92
查看次数