A. 关于C语言标准输出函数printf的问题
这个问题考察的是运算符的优先级,++和--的优先级高于取反(-)
i++(或者i--)表示先取用i的值,然后再进行自加(或者自减)运算
++i(或者--i)表示先对i进行自加(或者自减)运算,再取用i的新值
多数编译器会从右向左对参数压栈,所以printf函数会从右向左依次计算参数值。
i=8,->(-i--)=-8,此时i=7
->(-i++)=-7,此时i=8
->(i--)=8,此时i=7
->(++i)=8,此时i=8
->(--i)=7,此时i=7
->(++i)=8,此时i=8
->i=8
但是,压栈顺序没有硬性规定,所以不同编译器可能有不同的压栈操作,结果会有不同
B. C语言中printf是库函数,那么printf的代码到底在哪里呢
如果你能找到你的编译器的库文件放在哪里,那么只要把你的自己编写的函数放在编译器的库函数的文件察橘中,直接引用就可以。
但是很多编译器的库函数是不开放的,你很难找到库函数的文件在哪。
因此,你只能把自己写的函数电脑的某个盘里,如d:\\盘,引用的时候直接引用就行。比如,自己写个文件(myfile.h)放在d
盘,即路径为d:\\myfile.h
举个例子:
【1.】把myfile.h文件放在d盘
可以新建一个记事本文件巧穗(后缀.txt),把文件名改为(myfile.h),在该文件中添加如下内容:
//myfile.h自定义一个的输出*图行的文件,相当于库函数
#include<stdio.h>
voiddisplay_san(intn)//打印*三角形
{
inti;
for(i=0;i<n;i++)
{
printf("*\n");
printf("***\n");
printf("*****\n");
printf("*******\n");
printf("*********\n");
printf("***********\n");
}
}
voiddisplay_si(intn)//打印*矩形
{
inti;
for(i=0;i<n;i++)
{
printf("******\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("******\败宽团n");
}
}
//还可以有更多的函数.......放在一个文件中,成了自定义的库函数
【2.】在主函数中,引入该文件:
#include"d:\\myfile.h"//引入自定义的文件,该文件包含两个函数(即自定义的库函数)
voidmain()
{
display_san(2);//在d:\\myfile.h文件中定义了
display_si(3);//在d:\\myfile.h文件中定义了
}
这就成了引用库函数了!!!!!!
C. c中,当在printf进行算数运算,编译器有创建临时变量操作吗
像加法这类比较简单的计算,编译仔桐器一般都是借助寄存器直接完成的慧州。你可以认为编念碧坦译器将寄存器作为临时变量使用。
D. 编译器提示 printf 未定义!这怎么可能
据传闻, 某些用于微软视窗系弊瞎统的 C 编译器不支持 printf()。也许可以让这样的编译器认为写的是 “控制台程宏友序”, 这样编译器会打开 “控制台窗口” 从蔽卜槐而支持 printf()。