我正在查看/usr/include/stdio.h
碰巧遇到了下面这段代码.
/* Standard streams. */
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */
/* C89/C99 say they're macros. Make them happy. */
#define stdin stdin
#define stdout stdout
#define stderr stderr
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个结构struct _IO_FILE声明在哪里,我想看看布局.以及代码提到
#define stdin stdin
Run Code Online (Sandbox Code Playgroud)
这应该怎么样?
我正在研究GCC中的各种编译器选项,并在我对要使用的标准进行更改时观察更改.
$ gcc Q1.c -Wall -save-temps -o Q1
$ vi Q1.s
Run Code Online (Sandbox Code Playgroud)
我看到其中一个操作码为
call __isoc99_scanf
Run Code Online (Sandbox Code Playgroud)
现在当我用C89标准编译时
$gcc Q1.c -Wall -save-temps -std=c89 -o Q1
$ vi Q1.s
Run Code Online (Sandbox Code Playgroud)
我认为操作码是
call scanf
Run Code Online (Sandbox Code Playgroud)
这两种形式有scanf什么区别?我可以看到他们的来源的任何链接将受到高度赞赏.
我编写了一个程序来使用XOR交换2个变量.
var1 = var1 ^ var2;
var2 = var2 ^ var1;
var1 = var1 ^ var2;
Run Code Online (Sandbox Code Playgroud)
我编译它以获得程序集输出和其他输出
$ gcc Q1.c -save-temps -o Q1
Run Code Online (Sandbox Code Playgroud)
我在装配表单中获得此输出...
movl 24(%esp), %edx
movl 28(%esp), %eax
xorl %edx, %eax
movl %eax, 24(%esp)
movl 28(%esp), %edx
movl 24(%esp), %eax
xorl %edx, %eax
movl %eax, 28(%esp)
movl 24(%esp), %edx
movl 28(%esp), %eax
xorl %edx, %eax
Run Code Online (Sandbox Code Playgroud)
我不熟悉x86程序集,但我从事过ARM程序集.数字24和28在这里意味着什么?
movl 28(%esp), %edx
movl 24(%esp), %eax
Run Code Online (Sandbox Code Playgroud) 我们使用malloc()在C中动态分配内存,并且我们收到指向堆中位置的指针.现在我们使用free()来释放内存,传递与argumnet相同的指针值.
现在的问题是free()如何知道取消分配多少...考虑到我们总是可以调整malloc()分配的内存块的事实.
这里有什么与哈希表相关的东西吗?
我是一名初级程序员,刚刚开始学习C++编程,
我看了一个名为"FUNCTION OVERLOADING"的功能,虽然我已经理解了代码级别的目的和实现,但我还没有理解它是如何在编译器级别实现的,即编译器如何区分签名具有相同名称的不同功能
return-type func-name (data-type 1 , data-type-2);
Run Code Online (Sandbox Code Playgroud)
会有同样的签名
return-type func-name (data-type 2 , data-type-1);
Run Code Online (Sandbox Code Playgroud)
并且同样的事情也适用于重载的构造函数吗?
我正在检查GCC生成的预处理输出,我在.i使用该-save-temps标志生成的文件中看到了很多这些:
# 8 "/usr/include/i386-linux-gnu/gnu/stubs.h" 2 3 4
Run Code Online (Sandbox Code Playgroud)
绝对路径之前和之后的数字stubs.h是什么意思?它似乎是由预处理器插入的某种调试信息,并允许编译器发出引用此信息的错误消息.这些行不会影响程序本身,但每个数字具体是什么?