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