c深さ解剖-記号

3265 ワード

c深さプロファイリング-シンボル
 
1.コメント記号
int/*...*/i;                                  
 char* s = "abcdefgh      //hijklmn";         
 
 //Is it a \                          \    
 valid comment?
 
 in/*...*/t i;                             

ルール:
コンパイラはコンパイル中にコメントを削除し、スペースで置き換えます.
コンパイラは、//を含む二重引用符で囲まれた文字列だと考えています.
/**/ネストできません
y=x/*p              /*     ,  +  
*/
y=x/(*p)          //  

 
2.コネクタとエスケープ
記号
コンパイラは自動的にを削除し、後の文字は自動的に前の行に接続されます.
単語を接続する場合は、後にスペースを付けることはできません.次の行の前にスペースを付けることはできません.
#defineは1行以内で完了するため、マクロコードブロックで使用するのに適しています.
#include 
​
#define SWAP(a,b) \
{                 \
 int temp = a; \
 a = b;        \
 b = temp;     \
}//       
​
void swap(int a, int b) 
{
 int temp = a; 
 a = b;        
 b = temp;     
} //     
​
int main()
{
 int a = 1;
 int b = 2;
​
 SWAP(a, b);
​
 printf("a=%d, b=%d
", a, b); ​ return 0; }

表示されない文字を表すこともできます.たとえば、t、通常の文字を表すこともできます.
d 8進、x 16進
 
3.一重引用符、二重引用符
#include 
​
int main()
{
 char* p1 =  1 ;
 char* p2 = '1';
 char* p3 = "1";
​
 printf("%s, %s, %s", p1, p2, p3);  //error,p1,p2     
 printf('
');                      //error,printf(char *) printf("
"); return 0; }

'a'文字定数、サイズ1,'a'+1='b'
「a」文字列定数、サイズ2、「a」+1='0'終端
#include 
​
int main()
{
​
 char c = " ";     //              c 
​
 while (c == "\t" || c == " " || c == "
") {     scanf("%c", &c); } ​ return 0; } // "" ''

 
4.論理演算子
#include 
​
int main()
{
 int i = 0;
 int j = 0;
 
 if( ++i > 0 || ++j > 0 )
 {
     printf("%d
", i);     printf("%d
", j); } return 0; } //answer 1 0 ,j , && 1

プログラムショートルール:
計算を左から右へ、最初の真停止計算に遭遇
&&左から右へ計算し、最初の偽停止計算に遭遇
さんこうえんざんし
(a?b:c)、aは真で、bの値を返して、さもなくばcの値を返します
int a = 0;
int b = 1;
​
(a < b ? a : b) = 3; //  ,     1=3
*(a < b ? &a : &b) = 3;

 
5.演算子
優先度エラーを回避するためにカッコを使用する
0x1<<2+3    32

交換を実現するために使用できる
#define SWAP3(a,b) \
{                  \
 a = a ^ b;     \
 b = a ^ b;     \
 a = a ^ b;     \
} //      

 
6.++、--オペレータ
int i = 3;
int x;
int j = (++i) + (++i) + (++i);  //18
x=(++i,i++,i+10);//15

カンマ式は左から右に順番に評価され、最後の式の値を返します.
++,--欲張り原則:左から右へ1回できるだけ多くの文字を読み込む
a+++b ; //    a++   + b
++i++;  //  

 
7.優先度
[] ,(),. の優先順位は*より高い
== !=上位ビット操作と代入記号
演算数演算がシフトより高い
カンマの優先度が最も低い
int * ap[];  //   int * (ap[]) , ap       
int * fp();  //   int * (fp()) ,fp    int* 
*p.f      ;  //   *(p.f) ,   ->  
(val & mask !=0); //    val & (mask!=0)
c=getchar() != EOF; //    c=(getchar!=EOF)
msb<<4+lsb;   //   msk< 
  

 
8.タイプ変換
演算、低タイプ変換高タイプchar、short、int、u int、long、u long、double、float
割り当て