c/c++补充_1

1.关于scanf()与printf()的返回值问题


int x = scanf("%d %c", &a,&b);


x表示正确输入的变量的个数。但是如果第一个变量输入出了错误,那么编译器就按后面全错


返回x等于0;只有第一个正确输入以后才能正确的计算出正确输入变量的数量;


int y =printf("%d %c", a,b);


y表示输出的字符串长度,主要是"*******"里面的那一部分(*******)字符串!!


2.关于5个调用约定
(1)__stdcall
(2)__cdecl
(3)__fastcall
(4)__thiscall
(5)__naked call


3.文件的编译过程


**.cpp->**.i->汇编->**.obj->*.exe


4.查询一下esp、ebp、eip、push、pop、call、ret的具体意思


5.编译器在编译代码的时候有两种编译方式:


(1)win32 Debug: a)支持用断点调试


(2)win32 Release: a)不支持用断点调试
Debug比Release里面多了很多调试信息,所以前者比后者大,比如说assert在 Release版本 就不起作用,DEBUG就是用于调试的,而Release 是用于发行的.
Debug 的 Runtime Library 加强了对错误的检测,如堆内存分配,有时会出现 Debug 有错但 Release 正常的现象,
补充:只有DEBUG版的程序才能设置断点、单步执行、使用TRACE/ASSERT等调试输出语句。REALEASE不包含任何调试信息,所以体积小、运行速度快。 








用两种编译方式编译以下代码:


int main()


{
  int i = 0;


  printf("%d %d %d \n", ++i, i++, ++i);


  printf("%d\n", i);


  return 0;
}


分别写出输出的结果。


6.关于c++的输入cin>>a>>b的问题(有待查询学习)


int main()


{


  int a;


  char ch;


  cin>>a>>ch;


  return 0;


}


7.只有负数在扩充的时候才扩充1,其它的情况只扩充0;


int main()


{


  int a=b;


  char ch=100;--->(实际上在内存中是怎么样保存的,要把它写成二进制的,根据规则翻


译,就像计算机一样,不要转变成十进制计算。这是关键)


  a=ch;------>(要扩充)


  ch =a;------>(要截取)


  return 0;


}


char a=500---->(二进制是多少?) 1 1111 0100 


8.float ft=12.25;


  int* ip =&ft;---->(此时编译会出错,要变成int* ip =(int*)&ft,)


体会:
指针对内存的解读根据其类型,但是“=”两边的类型实现相同后再能再谈这些,这


样编译才能通过。


9.写出 c


10.#define:


(1)没有类型的检查。


(2)没有内存的分配。


11.const a 在c++中用覆盖的方式在编译的时候直接替换,相当于#define的效果,他是直


接替换,不再从变量a中取值,这样就是一种优化,有利于提高效率!这个也是const在c++比在c中扩展出来的东西之一!


12.问题:


(1)怎么确定测试编译器到底是用c还是用c++的编译方式编译源代码的?-->作业!!!!!
用bool检测(c++不包括bool)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值