C-langage

1,037 views
905 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,037
On SlideShare
0
From Embeds
0
Number of Embeds
81
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

C-langage

  1. 1. C-LANG
  2. 2. コンパイル⽅方法1.  cc  chap1_̲1.c   →  a.out  が⽣生成される2.  cc  chap1_̲1.c  -‐‑‒o  chap1_̲1 →  chap1_̲1  が⽣生成される
  3. 3. 主なエラーメッセージ1.  syntax  error -‐‑‒  スペルミスなどの⽂文法エラー2.  undeclared -‐‑‒  宣⾔言されていない変数エラー3.  parse  error -‐‑‒  {}抜けなどの構⽂文エラー
  4. 4. intのあれこれ・8進数⼊入れる場合は  x  =  0666・16進数⼊入れる場合は  x  =  0x6F15
  5. 5. インクリメントの順番・x++ 式を評価してから,  xに1を⾜足す・++x xに1を⾜足してから,  式を評価
  6. 6. ビット演算⼦子&  :  論論理理積   |  :  論論理理和^  :  排他的論論理理和~∼  :  ビットを反転させる<<  :  指定した数だけ左へシフト  (0埋め)>>  :  指定した数だけ右へシフト  (機種依存)
  7. 7. 条件式・条件式  ?  式1  :  式2 成⽴立立→式1 不不成⽴立立→式2
  8. 8. 配列列 int  x[30]; int  x[30]  =  {10,  20,  30,  328}; int  x[]  =  {10,  20,  30,  328}; int  x[]; ←Error!
  9. 9. ⽂文字列列 char  name[20]; name[0]=ʼ’Sʼ’;  name[1]=”u”;  name[2]=..... char  name[20]  =  {ʻ‘Sʼ’,  ʻ‘uʼ’,  ʻ‘zʼ’,  ʻ‘uʼ’,  ʻ‘kʼ’,  ʻ‘iʼ’,  ʻ‘¥0ʼ’}; printf(“%s¥n”,  name); char  name[20]  =  “Suzuki”;  でも上と同様の効果 ⽂文字はシングルクォーテーション! ⽂文字列列はダブルクォーテーション!
  10. 10. ⽂文字列列 scanf(“%d”,  x); scanf(“%s”,  str[0]); ⽂文字列列をscanfする場合、 先頭を指定すればOK.
  11. 11. 2次元配列列 int  data[3][5]  ={  {3,4,8,6,4},  {6,4,2,2,0},  ...}; ⾏行行    列列 5列列 3⾏行行
  12. 12. ポインタの役割 ①  配列列に添字を使わずアクセス!(古来) ②  ⽂文字列列を扱う! ③  関数の引⽤用として⽤用いる!
  13. 13. ポインタの使い⽅方int  *pa;pa  =  &a; a  のアドレスを⼊入れるprintf(“%p¥n”,  pa); a  のアドレスを表⽰示printf(“%d¥n”,  *pa); a  の値を表⽰示*pa  +=  10; a  に10を⾜足す
  14. 14. ファイルの⼊入出⼒力力  -‐‑‒  ファイルポインタ編 r    読み出し w    書き込み FILE  *fp; a    追加 r+  読み書き(新規作成なし) w+  読み書き(新規作成あり) fp  =  fopen(“file.txt”,  “r”); a+  読み書き(新規作成あり) if(  (fp  =  fopen(“file.txt”,  “r”))  ==  NULL  ){ /*  エラー処理理  */ }
  15. 15. ファイルの⼊入出⼒力力  -‐‑‒  ⼊入⼒力力関数編 while(  (c=getc(fp))  !=  EOF  ) printf(“%c”,  c); while(  fscanf(fp,  “%s%d”,  city,  value)  !=  EOF  ) printf(“%s  -‐‑‒>  %d¥n”,  city,  value); 書式⽂文字の利利⽤用が可能!
  16. 16. ファイルの⼊入出⼒力力  -‐‑‒  出⼒力力関数編 for(i=0;  name[i]  !=  (c=getc(fp))  !=  EOF  ) printf(“%c”,  c); fprintf(fp,  “%s%d”,  city,  value); 書式⽂文字の利利⽤用が可能!
  17. 17. ⾼高度度なポインタ 1.  ⽂文字列列の配列列を持つ char  *配列列名[]  =  {“⽂文字列列1”,  “⽂文字列列2”,  ...  };
  18. 18. ⾼高度度なポインタ 2.  ポインタのポインタ char  *p,  **dp; p  =&c; dp  =  &p; printf(“%p¥n”,  *dp); 変数C  のアドレスが表⽰示 printf(“%d¥n”,  **dp); 変数C  の中⾝身が表⽰示
  19. 19. コマンドライン引数 int  main(int  argc,  char  *argv[]){ ..... ..... ..... return  0; }
  20. 20. モジュール化プログラミング -‐‑‒  make  コマンド -‐‑‒  関数プロトタイプ宣⾔言 -‐‑‒  ヘッダファイル(.h) -‐‑‒  読み込む時は  #include  “header.h” -‐‑‒  extern  int  x;  //  外部変数 環境変数で指定されてる場合は、 #include  <stdio.h>
  21. 21. メモリの管理理 Score  *p,  *top; if(  (p  =  (Score  *)malloc(sizeof(Score)  *  size)) ==NULL){ /*  領領域確保エラー  */ } top  =  p;  //先頭を覚えておいて… /*  pをほげほげ  */ free(top);  //開放!
  22. 22. ⽂文字列列の配列列 -‐‑‒定義   char  *str[]  =  {“Hello”,  “Good-‐‑‒bye”,  “OK”}; -‐‑‒表⽰示    printf(“%s¥n”,  str[0]);  printf(“%s¥n”,  str[1]);  printf(“%s¥n”,  str[0]);
  23. 23. システムコール カーネルの昨⽇日にアクセスする関数  (代表例例) SIGINT  :  端末からのインタラプト⽂文字 SIGALRM  :  alarmシステムコール SIGSEGV  :  不不正なメモリアクセス signal(SIGINT,  func);インタラプト⽂文字 func()  を呼び出しが⼊入⼒力力されたら
  24. 24. fork() 実⾏行行中のプロセスを複製する 親 pid  =  fork(); fork() if(  pid  !=  0){ //  親プロセス }  else  {    //  ⼦子プロセス ⼦子 }
  25. 25. wait()とexit() ⼦子の終了了を待つ wait() pid  =  fork(); 親 if(  pid  !=  0){ //  親プロセス exit() wait(&status);  //  ⼦子の終了了を待つ }  else  { ⼦子    //  ⼦子プロセス exit(status);  //  終了了を明⽰示 }
  26. 26. exec(),  execvp() 他プログラムを実⾏行行 親 char  *argv[]  =  {“ls”,  “-‐‑‒a”,  NULL}; execvp(“ls”,  argv); execvp() コマンドのパス コマンドライン 引数を渡す 親
  27. 27. プロセス間通信 -‐‑‒  パイプ -‐‑‒  FIFO特殊ファイル -‐‑‒  ソケット
  28. 28. プロセス間通信  -‐‑‒  パイプ -‐‑‒  fd[0]  :  読み取り専⽤用 -‐‑‒  fd[1]  :  書き込み専⽤用 -‐‑‒  pipe(fd) fd[0] fd[0] 親 パイプ ⼦子 fd[0] fd[1]
  29. 29. 親 パ ⼦子プロセス間通信  -‐‑‒  パイプ if(  pipe(fd)==  -‐‑‒1){ perror(“pipe”); } if(  (len=write(fd[1],  buf,  strlen(buf)+1))==NULL){ perror(“write”); } if(  (len=read(fd[0],  buf,  strlen(buf)))==NULL){ perror(“read”); }
  30. 30. プロセス間通信  -‐‑‒  FIFO特殊 -‐‑‒  任意のプロセス間で通信可能 -‐‑‒  mknode(),  mkfifo() -‐‑‒  扱いはファイル操作と同じ 親 FIFO 親
  31. 31. 親 FIFO 親 プロセス間通信  -‐‑‒  パイプ if(  mkfifo(“myFifo”,  0666)  ==  -‐‑‒1){make perror(“mkfifo”); } if(  (fd=open(“myfifo”,  O_̲WRONLY))  ==  -‐‑‒1){open perror(“open”); } if(  write(fd,  buf,  sizeof(buf)))==-‐‑‒1){write! perror(“write”); }
  32. 32. 親 FIFO 親 プロセス間通信  -‐‑‒  パイプ if(  (fd=open(“myfifo”,  O_̲RDONLY))  ==  -‐‑‒1){open perror(“open”); } if(  ret=  read(fd,  buf,  sizeof(buf)))==-‐‑‒1){read! perror(“write”); }
  33. 33. プロセス間通信  -‐‑‒  ソケット -‐‑‒  ネットワーク上でやり取り可能 -‐‑‒  コードなし ソケット ソケット ネット 親 ワーク 親

×