C/C++プログラミング02(基本概念,I/Oストリーム,CとC++の関係,ミキシング)

8211 ワード

第5章プログラム設計の基本概念
1.代入文
引用:賦値時タイプ変換(目標タイプ変換、精良不損失精度)
オペレータの原理、および優先度(メンバー作用シンボル、乗算、加減、左シフト、判断操作、ビット操作、付与オペレータ、ループ体).
バイナリ(B)、16進数(H)、10進数の変換(D)、8進数(O)(10進数入力求位操作は必ず厳密に10進数変換バイナリの方法で行います).
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
", a, b, c);

説明:
%d 10進符号付き整数%u 10進符号なし整数%f浮動小数点数%s文字列%c単一文字%pポインタの値%e指数形式の浮動小数点数%x、%X符号なし16進符号で表される整数%0符号なし8進法で表される整数%g自動選択
(1).「%」とアルファベットの間に最大フィールド幅を表す数字を挿入できます.例えば:%3 dは出力3ビット整数数を表し、3ビット右揃え未満である.%9.2 fは出力場幅が9の浮動小数点数を表し、そのうち小数位は2、整数位は6、小数点は1位を占め、9位未満は右揃えである.%8 sは8文字を出力する文字列を表し、8文字未満で右揃えです.文字列の長さ、または整数ビット数が説明のフィールド幅を超える場合は、実際の長さで出力されます.しかし、浮動小数点数については、整数部分の桁数が説明した整数ビット幅を超えると、実際の整数ビットで出力される.小数部位数が説明の小数位幅を超えると、説明の幅で四捨五入して出力されます.また、出力値の前に0を追加するには、フィールド幅の前に0を追加します.例えば、%04 dは、4ビット未満の数値を出力すると、その総幅が4ビットになるように前に0を補うことを示す.浮動小数点数で文字や整数の出力フォーマットを表す場合、小数点以下の数字は最大幅、小数点前の数字は最小幅を表します.たとえば、%6.9 sは、6以上9以下の長さの文字列を表示します.9より大きい場合、9文字目以降の内容は削除されます.  (2).「%」とアルファベットの間に小文字lを加えて、出力が長い数であることを示すことができます.例えば、%ldは出力long整数を表し、%lfは出力double浮動小数点数を表す.(3).出力の左揃えまたは右揃えを制御できます.「%」とアルファベットの間に「-」記号を追加すると、出力が左揃えであることを示します.そうしないと右揃えです.例えば、%-7 dは出力7ビット整数の左揃えを表し、%-10 sは出力10文字の左揃えを表す.
いくつかの特殊な規定の文字は改行してfスクリーンをきれいにしてそしてページを変えますrは車に戻りますt Tab符xhhは1つのASCIIコードが16進で表すことを表して、ここでhhは1から2つの16進数です
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.1 C/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;
}