SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
C-LANG
コンパイル⽅方法

1.	
  cc	
  chap1_̲1.c	
  
       →	
  a.out	
  が⽣生成される

2.	
  cc	
  chap1_̲1.c	
  -‐‑‒o	
  chap1_̲1
       →	
  chap1_̲1	
  が⽣生成される
主なエラーメッセージ

1.	
  syntax	
  error
         -‐‑‒	
  スペルミスなどの⽂文法エラー

2.	
  undeclared
         -‐‑‒	
  宣⾔言されていない変数エラー

3.	
  parse	
  error
         -‐‑‒	
  {}抜けなどの構⽂文エラー
intのあれこれ

・8進数⼊入れる場合は	
  x	
  =	
  0666

・16進数⼊入れる場合は	
  x	
  =	
  0x6F15
インクリメントの順番

・x++
  式を評価してから,	
  xに1を⾜足す

・++x
  xに1を⾜足してから,	
  式を評価
ビット演算⼦子

&	
  :	
  論論理理積	
  
 |	
  :	
  論論理理和
^	
  :	
  排他的論論理理和
~∼	
  :	
  ビットを反転させる
<<	
  :	
  指定した数だけ左へシフト	
  (0埋め)
>>	
  :	
  指定した数だけ右へシフト	
  (機種依存)
条件式

・条件式	
  ?	
  式1	
  :	
  式2

     成⽴立立→式1
     不不成⽴立立→式2
配列列

 int	
  x[30];
 int	
  x[30]	
  =	
  {10,	
  20,	
  30,	
  328};
 int	
  x[]	
  =	
  {10,	
  20,	
  30,	
  328};

 int	
  x[]; ←Error!
⽂文字列列
 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”;	
  でも上と同様の効果

                                          ⽂文字はシングルクォーテーション!
                                          ⽂文字列列はダブルクォーテーション!
⽂文字列列

  scanf(“%d”,	
  x);

  scanf(“%s”,	
  str[0]);
                  ⽂文字列列をscanfする場合、
                  先頭を指定すればOK.
2次元配列列

 int	
  data[3][5]	
  ={	
  {3,4,8,6,4},	
  {6,4,2,2,0},	
  ...};
           ⾏行行	
  	
  列列


                                            5列列



                           3⾏行行
ポインタの役割


 ①	
  配列列に添字を使わずアクセス!(古来)


 ②	
  ⽂文字列列を扱う!


 ③	
  関数の引⽤用として⽤用いる!
ポインタの使い⽅方

int	
  *pa;
pa	
  =	
  &a; a	
  のアドレスを⼊入れる
printf(“%p¥n”,	
  pa); a	
  のアドレスを表⽰示
printf(“%d¥n”,	
  *pa); a	
  の値を表⽰示

*pa	
  +=	
  10;   a	
  に10を⾜足す
ファイルの⼊入出⼒力力	
  -‐‑‒	
  ファイルポインタ編
                                             r	
  	
  読み出し
                                             w	
  	
  書き込み
 FILE	
  *fp;                                a	
  	
  追加
                                             r+	
  読み書き(新規作成なし)
                                             w+	
  読み書き(新規作成あり)
 fp	
  =	
  fopen(“file.txt”,	
  “r”);
                                             a+	
  読み書き(新規作成あり)

 if(	
  (fp	
  =	
  fopen(“file.txt”,	
  “r”))	
  ==	
  NULL	
  ){
        /*	
  エラー処理理	
  */
   }
ファイルの⼊入出⼒力力	
  -‐‑‒	
  ⼊入⼒力力関数編


  while(	
  (c=getc(fp))	
  !=	
  EOF	
  )
   printf(“%c”,	
  c);



  while(	
  fscanf(fp,	
  “%s%d”,	
  city,	
  value)	
  !=	
  EOF	
  )
   printf(“%s	
  -‐‑‒>	
  %d¥n”,	
  city,	
  value);
                                          書式⽂文字の利利⽤用が可能!
ファイルの⼊入出⼒力力	
  -‐‑‒	
  出⼒力力関数編


  for(i=0;	
  name[i]	
  !=	
  (c=getc(fp))	
  !=	
  EOF	
  )
    printf(“%c”,	
  c);



  fprintf(fp,	
  “%s%d”,	
  city,	
  value);

                                        書式⽂文字の利利⽤用が可能!
⾼高度度なポインタ


 1.	
  ⽂文字列列の配列列を持つ

     char	
  *配列列名[]	
  =	
  {“⽂文字列列1”,	
  “⽂文字列列2”,	
  ...	
  };
⾼高度度なポインタ


 2.	
  ポインタのポインタ
    char	
  *p,	
  **dp;
    p	
  =&c;
    dp	
  =	
  &p;

    printf(“%p¥n”,	
  *dp);    変数C	
  のアドレスが表⽰示

    printf(“%d¥n”,	
  **dp);   変数C	
  の中⾝身が表⽰示
コマンドライン引数

 int	
  main(int	
  argc,	
  char	
  *argv[]){
       .....
       .....
       .....
       return	
  0;
   }
モジュール化プログラミング


  -‐‑‒	
  make	
  コマンド
  -‐‑‒	
  関数プロトタイプ宣⾔言
  -‐‑‒	
  ヘッダファイル(.h)
  -‐‑‒	
  読み込む時は	
  #include	
  “header.h”
  -‐‑‒	
  extern	
  int	
  x;	
  //	
  外部変数

                       環境変数で指定されてる場合は、
                       #include	
  <stdio.h>
メモリの管理理

  Score	
  *p,	
  *top;
  if(	
  (p	
  =	
  (Score	
  *)malloc(sizeof(Score)	
  *	
  size))
               ==NULL){
               /*	
  領領域確保エラー	
  */
            }
  top	
  =	
  p;	
  //先頭を覚えておいて…


  /*	
  pをほげほげ	
  */

  free(top);	
  //開放!
⽂文字列列の配列列


  -‐‑‒定義
    char	
  *str[]	
  =	
  {“Hello”,	
  “Good-‐‑‒bye”,	
  “OK”};

  -‐‑‒表⽰示	
  
      	
  printf(“%s¥n”,	
  str[0]);
      	
  printf(“%s¥n”,	
  str[1]);
      	
  printf(“%s¥n”,	
  str[0]);
システムコール

 カーネルの昨⽇日にアクセスする関数
 	
  (代表例例)
  SIGINT	
  :	
  端末からのインタラプト⽂文字
  SIGALRM	
  :	
  alarmシステムコール
  SIGSEGV	
  :	
  不不正なメモリアクセス



 signal(SIGINT,	
  func);

インタラプト⽂文字                   func()	
  を呼び出し
が⼊入⼒力力されたら
fork()

   実⾏行行中のプロセスを複製する
                                   親
         pid	
  =	
  fork();

                                       fork()
         if(	
  pid	
  !=	
  0){
             //	
  親プロセス
         }	
  else	
  {
         	
  	
  //	
  ⼦子プロセス          ⼦子
         }
wait()とexit()
  ⼦子の終了了を待つ                                      wait()

     pid	
  =	
  fork();                     親

     if(	
  pid	
  !=	
  0){
         //	
  親プロセス                             exit()
         wait(&status);	
  //	
  ⼦子の終了了を待つ


     }	
  else	
  {                              ⼦子
     	
  	
  //	
  ⼦子プロセス
         exit(status);	
  //	
  終了了を明⽰示
     }
exec(),	
  execvp()
   他プログラムを実⾏行行
                                                              親
       char	
  *argv[]	
  =	
  {“ls”,	
  “-‐‑‒a”,	
  NULL};
       execvp(“ls”,	
  argv);                                     execvp()


    コマンドのパス                         コマンドライン
                                    引数を渡す
                                                                  親
プロセス間通信

  -‐‑‒	
  パイプ
  -‐‑‒	
  FIFO特殊ファイル
  -‐‑‒	
  ソケット
プロセス間通信	
  -‐‑‒	
  パイプ

    -‐‑‒	
  fd[0]	
  :	
  読み取り専⽤用
    -‐‑‒	
  fd[1]	
  :	
  書き込み専⽤用
    -‐‑‒	
  pipe(fd)

                                    fd[0]     fd[0]

                             親              パイプ           ⼦子


                                    fd[0]         fd[1]
親         パ   ⼦子
プロセス間通信	
  -‐‑‒	
  パイプ

    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”);
         }
プロセス間通信	
  -‐‑‒	
  FIFO特殊

    -‐‑‒	
  任意のプロセス間で通信可能
    -‐‑‒	
  mknode(),	
  mkfifo()
    -‐‑‒	
  扱いはファイル操作と同じ




                      親       FIFO   親
親     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”);
              }
親    FIFO   親
 プロセス間通信	
  -‐‑‒	
  パイプ

        if(	
  (fd=open(“myfifo”,	
  O_̲RDONLY))	
  ==	
  -‐‑‒1){
open         perror(“open”);
             }

        if(	
  ret=	
  read(fd,	
  buf,	
  sizeof(buf)))==-‐‑‒1){
read!        perror(“write”);
             }
プロセス間通信	
  -‐‑‒	
  ソケット

    -‐‑‒	
  ネットワーク上でやり取り可能
    -‐‑‒	
  コードなし

          ソケット            ソケット




                    ネット
  親                 ワーク
                                 親

Mais conteúdo relacionado

Mais procurados

Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
Jiro Nishiguchi
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
Shinichi Awamoto
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみる
Shintaro Fukushima
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
ftnk
 

Mais procurados (20)

Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
php7's ast
php7's astphp7's ast
php7's ast
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
R3.0.0 is relased
R3.0.0 is relasedR3.0.0 is relased
R3.0.0 is relased
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみる
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
シェル入門
シェル入門シェル入門
シェル入門
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
速習A tour of go
速習A tour of go速習A tour of go
速習A tour of go
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
OSS開発勉強会-10
OSS開発勉強会-10OSS開発勉強会-10
OSS開発勉強会-10
 
マスターオブゴールーチンアンドチャネル スタートGo #1
マスターオブゴールーチンアンドチャネル   スタートGo #1マスターオブゴールーチンアンドチャネル   スタートGo #1
マスターオブゴールーチンアンドチャネル スタートGo #1
 
Nginx lua
Nginx luaNginx lua
Nginx lua
 

Semelhante a C-langage

ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
Koichi Suzuki
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
 
プログラマ講習第3回
プログラマ講習第3回プログラマ講習第3回
プログラマ講習第3回
Yuma Yoshimoto
 

Semelhante a C-langage (20)

Rの高速化
Rの高速化Rの高速化
Rの高速化
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
Rust使ってみた
Rust使ってみたRust使ってみた
Rust使ってみた
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
01 php7
01   php701   php7
01 php7
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Scapy presentation
Scapy presentationScapy presentation
Scapy presentation
 
Okinawapm #1
Okinawapm #1Okinawapm #1
Okinawapm #1
 
プログラマ講習第3回
プログラマ講習第3回プログラマ講習第3回
プログラマ講習第3回
 
Find(1)
Find(1)Find(1)
Find(1)
 
Yaminabe fortran
Yaminabe fortranYaminabe fortran
Yaminabe fortran
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 
0622
06220622
0622
 

Mais de Hiramatsu Ryosuke

iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
Hiramatsu Ryosuke
 

Mais de Hiramatsu Ryosuke (12)

iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方
 
iOSアプリ開発にほんのり役に立つtips集
iOSアプリ開発にほんのり役に立つtips集iOSアプリ開発にほんのり役に立つtips集
iOSアプリ開発にほんのり役に立つtips集
 
5分でつまむEffective Objective-C
5分でつまむEffective Objective-C5分でつまむEffective Objective-C
5分でつまむEffective Objective-C
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
 
iOSアプリの特急申請 - Apple Expedited Review Request
iOSアプリの特急申請 - Apple Expedited Review RequestiOSアプリの特急申請 - Apple Expedited Review Request
iOSアプリの特急申請 - Apple Expedited Review Request
 
emoSound by たこ部 | OpenHackDay2
emoSound by たこ部 | OpenHackDay2emoSound by たこ部 | OpenHackDay2
emoSound by たこ部 | OpenHackDay2
 
AppSwitcherでアプリをユーザーファーストに
AppSwitcherでアプリをユーザーファーストにAppSwitcherでアプリをユーザーファーストに
AppSwitcherでアプリをユーザーファーストに
 
Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳
 
iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
 
Unix
UnixUnix
Unix
 

Último

Último (12)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

C-langage

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