組込みソフト向けC言語コーディング規約|標準ライブラリ

シェアする

この記事では標準ライブラリを使うさいに注意すべきことを記載します。
標準ライブラリ関数で実現できることは標準ライブラリ関数を使用してください。特にメモリ操作系、文字列操作系の関数をわざわざ自作していることがよくあります。例えばmemcpy, memcmp, strstrなどです。メモリ操作や文字列操作にて自作関数を作ろうと思い立ったときは、一歩たちどまって標準ライブラリの一覧を見てみてください。すでにそこにほしい関数があるこかもしれません。
逆にロケール設定に依存するマルチバイト系の関数や時間系の関数は使用しないでください。たいてい意図通りにはうごきません。

スポンサーリンク

setjump, longjumpは使用しない

標準ライブラリ関数 setjump, longjump関数はマルチタスク環境下では正常に動作しないので利用しないでください。

time.hは使用しない

標準ライブラリのtime.hの関数は、実装依存が多く期待通りに動作しないので使用しないでください。

スレッドアンセーフな標準ライブラリ関数は使用しない

マルチタスク環境下では、スレッドアンセーフな関数は正常に動作しません。下記の関数は、標準ライブラリ関数を含むPOSIXの、スレッドアンセーフな関数です。使用しないでください。同等のスレッドセーフな代用関数が用意されている場合がありますので、それを使ってください。(ex. strtok_r, rand_r, etc…)

POSIXのスレッドアンセーフ関数一覧

asctime       basename      catgets          crypt
ctime         dbm_clearerr  dbm_close        dbm_delete
dbm_error     dbm_fetch     dbm_firstkey     dbm_nextkey
dbm_open      dbm_store     dirname          dlerror
drand48       ecvt          encrypt          endgrent
endpwent      endutxent     fcvt             ftw
gcvt          getc_unlocked getchar_unlocked getdate
getenv        getgrent      getgrgid         getgrgid
getgrgid      getgrnam      gethostbyaddr    gethostbyname
gethostent    getlogin      getnetbyaddr     getnetbyname
getnetent     getopt        getprotobyname   getprotobynumber
getprotoent   getpwent      getpwnam         getpwuid
getservbyname getservbyport getservent       getutxent
getutxid      getutxline    gmtime           hcreate
hdestroy      hsearch       inet_ntoa        l64a
lgamma        lgammaf       lgammal          localeconv
localtime     lrand48       mrand48          nftw
nl_langinfo   ptsname       putc_unlocked    putchar_unlocked
putenv        pututxline    rand             readdir
setenv        setgrent      setkey           setpwent
setutxent     strerror      strtok           ttyname
unsetenv      wcstombs      wctomb

(出力用の引数にNULLを渡すとスレッドアンセーフな関数)

ctermid       tmpnam        wcrtomb          wcsrtombs

以上、組み込み環境での標準ライブラリのコーディング規約でした!

他のコーディング規約は下記のページからたどれます。ぜひ見てみてくださいね

組込みソフトウェア向けC言語コーディング規約
どうも。ながやすです。 組込みソフト(ファームウェア)向けのc言語コーディング規約を書いています。これをみておけばcの文法的なミス減らせるかなと思います。また、C言語のベテランの方もひとつくらい...