タグ

cに関するembeddedのブックマーク (6)

  • MSC22-C. setjmp()、longjmp() の機能を安全に使用する

    MSC22-C. setjmp()、longjmp() の機能を安全に使用する setjmp() マクロは、[ISO/IEC 9899:1999] のセクション7.13.1.1 に列挙されている文脈からのみ呼び出すこと。それ以外の文脈から setjmp() を呼び出すと未定義の動作となる(未定義の動作 119 を参照)。 volatile 修飾型でないローカルオブジェクトの場合、値が setjmp() の呼び出し以降変更されていた場合、longjmp() の呼び出し後にそのオブジェクトにアクセスしてはならない。この場合、オブジェクトの値は不定と見なされ、アクセスすると未定義の動作が引き起こされる(未定義の動作 121、10 を参照)。 longjmp() 関数を使用して、実行がすでに終了している関数に制御を戻してはならない(未定義の動作 120 を参照)。 シグナルマスク、浮動小数点ステー

    MSC22-C. setjmp()、longjmp() の機能を安全に使用する
    embedded
    embedded 2014/02/20
    setjmpはif文の中で使うこと。戻り値をローカル変数に入れてはダメ。知らなかった。
  • Super Technique 講座~longjmpと例外

    プログラムの流れを制御する手段として、いわゆる「構造化構文(for とか if とか)」、悪名高い「goto 文」などがあるのは周知のことだが、かなり特殊なものとして、「setjmp, longjmp」による「非ローカル分岐」と呼ばれるものがある。この「非ローカル分岐」は「非ローカル」と言うだけあって、ある関数の中から、別な関数に制御を移すことができたりする。まあ、そのために乱用すべきではなく、注意して使わなくてはならないライブラリ関数なのだが、実はこれは JavaC++ で言語の上で実装されている「例外」の基礎となるものである。だから、まずこの標準ライブラリ関数「setjmp, longjmp」について解説しよう。 → Java 講座の「例外」 setjmp, longjmp とは どうやって実現してるの? setjmp/longjmp の利用例~インタプリタ 補追1:setjmp

    embedded
    embedded 2014/02/20
    setjmp/longjmpの話。
  • C 言語 マクロ講座 # ## 編: uyota 匠の一手

    # と ## はマクロ関数で使う。 # と ## 共に古くからマクロで実装されている。ところが、これを知らない人達がとても多い。 十年、二十年と C 言語を使ってきたという人でも知らないと言う人が結構いる。これを知らないから、余計なコードを書き、バグを増やし続けるのである。 高級言語と呼ばれる言語の中でも、単純な部類に入る C 言語。その C 言語よりも単純なマクロ言語の構文を把握していないのである。マクロ自体では、できることもたかが知れている。マクロでできるのは、ごく限られた置換や条件分岐処理程度のみだ。C 言語の構文だけでは、それこそ複数のファイルにコードを分けて書くこともできない。 ライブラリを作るのなどは、それこそ不可能だ。 しかし、C 言語はその欠点をマクロ言語を使い前処理することにより、強力な力を得た。C 言語以降もいくつもの高級言語が生まれてきたが、前処理を組み込んである言語

    embedded
    embedded 2013/10/11
    #は文字列に変換、##は識別子を連結。
  • const修飾子について

    ここでは、私、酒井理雄( TSUGU)がconst修飾子について解説したいと思います。 ご意見やご感想、また、ここおかしいんじゃない?というような所が あれば連絡していただけると作者が喜びます。 constの基 ポインタ変数に対するconst宣言 メンバ変数に対するconst宣言 (作成凍結) メンバ関数に対するconst宣言 TOP C言語においてconst修飾子では指定した変数が定数である(中身を変更 できない)ことを指定します。これによってプログラマの不注意による バグの混入を防ぐことが出来ます。 const修飾子を用いたもっとも簡単な例を次に示します。 const int i = 0; i = 1; //const指定した変数(定数)に値を代入しようとしたため、コンパイルエラー この例のように定数にしたい(値を変更したくない)変数の型名の前に const修飾子を付

    embedded
    embedded 2013/09/26
    ポインタ変数へのconstの使い方。int * const p = a;
  • http://blog.monoweb.info/blog/2012/07/14/c99-array/

    embedded
    embedded 2013/07/30
    混ぜるな危険。
  • Japanese Industrial Standards

    Copyright (c) 2017 Ministry of Economy,Trade and Industry. All Rights Reserved.

    embedded
    embedded 2008/08/26
  • 1