C/C++程序设计02(基本概念,I/O流,C和C++的关系,混编)

第5章 程序设计基本概念
1.赋值语句
引申到:赋值时类型转换(按目标类型转换,精良不损失精度)
操作符的原理,及优先级(成员作用符号,乘除,加减,左移右移,判断操作,位操作,赋值操作符,循环体)。
二进制(B),十六进制(H),十进制的转换(D),八进制(O)(十进制输入 求位操作时一定严格按照十进制转化二进制的方法进行)。
switch每个分支后面一定要有 break;
2.i++
	int count = 0;
	for (int i = 0; i < 2;i++)
	{
		count++;
	}
上例子中,先执行i=0,然后判断i<2,进入循环体,执行count++,循环体结束后执行i++,之后判断i<2,再进入循环体;

引申 C/C++的标准输入输出cin,cout和scanf,printf,putchar,getchar
getchar()和putchar()获得或者输出一个字符(char类型,或者int类型对应其ASCII码),用法:
	char c = getchar();	
	putchar(c);// 等价于std::cout << c;

scanf()和print发,执行printf是按照从 右到左的顺序,用方法如下:
	int a; float b; char c;
	scanf("%d %f %c", &a, &b, &c);//回车键结束所有输入;
	printf("a=%d,b=%f,c=%c\n", a, b, c);
说明:
%d 十进制有符号整数 
%u 
十进制无符号整数 
%f 
浮点数 
%s 
字符串 
%c 
单个字符 
%p 
指针的值 
%e 
指数形式的浮点数 
%x, %X 
无符号以十六进制表示的整数 
%0 
无符号以八进制表示的整数 
%g 
自动选择合适的表示法 
(1). 可以在"%"和字母之间插进数字表示最大场宽。 例如: %3d 表示输出3位整型数不够3位右对齐。%9.2f 表示输出场宽为9的浮点数其中小数位为2, 整数位为6, 小数点占一位不够9位右对齐。%8s 表示输出8个字符的字符串不够8个字符右对齐。 如果字符串的长度、或整型数位数超过说明的场宽将按其实际长度输出。 但对浮点数若整数部分位数超过了说明的整数位宽度将按实际整数位输出若小数部分位数超过了说明的小数位宽度则按说明的宽度以四舍五入输出。另若想在输出值前加一些0, 就应在场宽项前加个0 例如: %04d 表示在输出一个小于4位的数值时将在前面补0使其总宽度4位。如果用浮点数表示字符或整型量的输出格式小数点后的数字代表最大宽度小数点前的数字代表最小宽度。例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 9个字符以后的内容将被删除。 
(2). 
可以在"%"和字母之间加小写字母l, 表示输出的是长型数。例如: %ld 表示输出long整数, %lf 表示输出double浮点数。
(3). 
可以控制输出左对齐或右对齐即在"%"和字母之间加入一个"-" 号可说明输出为左对齐否则为右对齐。例如: %-7d 表示输出7位整数左对齐,%-10s 表示输出10个字符左对齐。

 一些特殊规定字符 
\n换行
\f
清屏并换页 
\r
回车 
\t Tab
 
\xhh
表示一个ASCII码用16进表示,其中hh1216进制数


3.C和C++的关系
区别C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
extern "C":解决名字匹配问题,详细如下:
     作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:
void foo( int x, int y );
  该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。
  _foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中,函数void foo( int x, int y )与void foo( int x, float y )编译生成的符号是不相同的,后者为_foo_int_float。
  同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。
引申:extern和static:
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:
  extern int a;
  仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。
  通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。
  与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用

3.1C/C++混合编程函数调用
详细见:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html
C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理:
<pre name="code" class="html">extern "C"
{
 #include "cExample.h"        //注:此处不妥,如果这样编译通不过,换成 extern "C" int add(int , int ); 可以通过
}
int main(int argc, char* argv[])
{
 add(2,3);
 return 0;
}

C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。例子如下:
<pre name="code" class="html">//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#include "cppExample.h"
int add( int x, int y )
{
 return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#include "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
 add( 2, 3 );
 return 0;
}














你可能感兴趣的:(C/C++程序设计02(基本概念,I/O流,C和C++的关系,混编))