タグ

cに関するtztのブックマーク (30)

  • リファクタリングにおけるC言語プログラマーの視点

    には、ファイルのコピーをするCFileCopyというクラスを例に、メンバー関数が多すぎるクラスを手直しする例が紹介されている。 だが、この例を見ると、リファクタリングによって、不適切なインターフェースを持つクラスができてしまっている。 まずは、手直しする前の、メンバー関数が多過ぎるCFileCopyクラスを引用する。 class CFileCopy { typedef bool (*UserCancelFunc)(const CFileCopy&,void*); typedef void (*DirDownFunc)(const CFileCopy&,const char*,void*); typedef void (*DirUpFunc)(const CFileCopy&,const char*,void*); typedef void (*FileCopyStartFunc)(cons

  • 連載記事「生産性向上への道 Eclipseで行うC/C 開発」 ― @IT MONOist

    組み込みソフトウェア/ハードウェア開発における技術力の向上、改善・最適化などを幅広く支援する“組み込み開発エキスパート”のための情報フォーラム

  • C言語・C++言語用テスティングフレームワーク - Cutter

    最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L

  • ハードウェアを意識したプログラミングの基礎(後編)

    前編では,デバイス・ドライバを理解するために必要なエンディアンやI/Oアクセス,ハードウェアとソフトウェアの境界について説明した.後編では,アクセス時のアラインメントについて説明した後,実際のコードを示しながらLinuxデバイス・ドライバの例を紹介する.  (編集部) 1.アクセスは境界に沿って エンディアン,I/Oアクセス,ハードウェアの次に問題になるのが,アクセス時のアラインメントです.CPUによってはアラインメントが合っていないアクセスが起こるとエラーになったり,意図しないデータが読めたりします.最後に紹介していますが,実は,知らないと一番見つけづらいところかもしれません. まず,「アラインメントが合っていないアクセス」が,どういうものかを定義しましょう. ここでは,「アクセスしようとしているアドレス値をアクセス幅で割ったときに,余りが出るようなアクセス」を「アラインメントが合ってい

    tzt
    tzt 2010/02/13
    アライメントに合わせてアクセスしなきゃいけないCPUでも__attribute__((__packed__))つけるとgccが良しなにコードを生成してくれる。遅いだろうけど。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    tzt
    tzt 2010/02/11
    「静的ローカル変数の初期化は、関数が呼び出されてから行われるのではなく、プログラムの実行開始時点で行われます。」
  • 静的変数の初期化 - (void*)Pないと

    http://www.geocities.jp/ky_webid/cpp/language/019.html 静的ローカル変数の初期化についてですが、C言語とは仕様が異なることに注意して下さい。C言語では、静的ローカル変数は、プログラムの実行開始時点で初期化されますが、C++では、通常のローカル変数と同様に、変数定義が記述されているところで初期化されます。そのため次のソースは、C言語ではエラーですが、C++では問題ありません。 void func(int num) { static int snum = num; // C++ではOK。C言語ではエラー } 引数に渡した値によってstaticの値を決定できるということは何か面白そうなものが作れそうな気がしないこともないですね。 いずれにせよC言語とC++との違いとして押さえておきたいです。

    静的変数の初期化 - (void*)Pないと
  • 千葉大学 情報戦略機構

    → 学内ネットワークからのみ閲覧可 Home 申し訳ございません。 このページは学内ネットワークからのみ閲覧可能です。 PAGE TOP

  • Cプログラミングのメモ

    CODE COMPLETE によると、プログラミングを上達するには日頃から よく読むこと (マニュアル・書籍・他人のソースコードなど) とよ く考えることが肝要だそうです。 何か耳寄りな情報があれば教えてくださいませ。 (ページの内容はかなり古くなっています) 目次 書籍 インターネット上の文書 ライブラリ ツール メモリプロファイラ GTK+/GNOME関連 その他 書籍 書籍の情報は 別の場所に移しました。 インターネット上の文書 Programming in C * C言語についての網羅的な情報源。 Steve Summit: C Programming FAQs: Frequently Asked Questions * 書籍版の 3/4ほどの内容。 情報源: Web版, 日語訳, 日語訳のHTML版 Henry Spencer: The Ten Commandments f

  • プログラミング言語 C の新機能

    7. 文法一般 この章では C 言語に新たに加えられた指示付きの初期化子や複合リテラルといった文法や、暗黙時の宣言に関する変更といった、変更された文法について説明します。 7.1 暗黙の関数宣言 現在の C 言語の規格では、ある関数から他の関数を呼び出す時、とくにその関数のプロトタイプを宣言しなくても使用することができました。例えば stdio.h を読み込まずに、printf を使用するといったことです。しかし、今度の C 言語ではそのような場合、その関数の呼び出しは規格上未定義の動作となります。ただ実際には多くの処理系では警告を出してコンパイルするよう実装されることでしょう。この辺の機能は C++ に近くなっていますね。 7.2 宣言時の暗黙の型 手続き型言語では、一般的に変数や関数などを宣言して使用する必要があります。もちろん C 言語も例外ではありません。しかし C 言語では特に型

    tzt
    tzt 2010/02/05
    restrict ポインタ
  • JPCERT C Secure Coding Standard 日本語版 - プリプロセッサ (PRE) (#c01)

    CERT C コーディングスタンダード 00. はじめに 01. プリプロセッサ (PRE) 02. 宣言と初期化 (DCL) 03. 式 (EXP) 04. 整数 (INT) 05. 浮動小数点 (FLP) 06. 配列 (ARR) 07. 文字と文字列 (STR) 08. メモリ管理 (MEM) 09. 入出力 (FIO) 10. 環境 (ENV) 11. シグナル (SIG) 12. エラー処理 (ERR) 13. Application Programming Interface (API) 14. 並行性 (CON) 49. 雑則 (MSC) 50. POSIX (POS) AA. 参考情報 BB. Definitions CC. 未定義の動作 DD. 未規定の動作 XX. お問い合わせ 00はじめに このページでは、JPCERTコーディネーションセンターが翻訳を行っている CE

    JPCERT C Secure Coding Standard 日本語版 - プリプロセッサ (PRE) (#c01)
  • EXP39-C. 適合しない型のポインタを使って変数にアクセスしない

    EXP39-C. 適合しない型のポインタを使って変数にアクセスしない 適合しない型のポインタ (unsigned char 以外) を通じて変数を変更すると予期せぬ結果を引き起こす可能性がある。多くの場合、これは別名付け (aliasing) の規則に違反することにより引き起こされる。C 標準 [ISO/IEC 9899:2011] セクション 6.5 のパラグラフ 7 には、オブジェクトの別名付けが行われる、または行われない状況について記載されている。 オブジェクトに格納された値に対するアクセスは,次のうちのいずれか1つの型を持つ左辺値によらなければならない。 オブジェクトの有効型と適合する型 オブジェクトの有効型と適合する型の修飾版 オブジェクトの有効型に対応する符号付き型または符号無し型 オブジェクトの有効型の修飾版に対応する符号付き型または符号無し型 メンバの中に上に列挙した型の1

    EXP39-C. 適合しない型のポインタを使って変数にアクセスしない
  • ホワット・ア・ワンダフル・ワールド strict aliasing rule

    来週からは後期スタートだというのに,生活ペースはメチャクチャ.昨日は 17 時に起きてしまい,今日は 22 時半ごろに起きてしまった今日この頃,皆様いかがお過ごしでしたでしょうか ? まぁ,順調に 6 時間ずつズレているので,明日には元に戻るかなと. しっかし,なんで夜型の方には一瞬で 6 時間とか 12 時間とか平気でズレるのに,朝方の方には意識しないと絶対にズレないんでしょうかね ? まぁ,朝の 3 時とかにバリバリ活動しているってのは,ある意味朝型と言えなくもないような (ことはない). 僕は夜はあんまり生産的な方面にやる気が出ない人なので,夜型になると研究がさっぱり進まないと言う.いろいろ危機です. あと,Debian にテキトーなパッケージをいっぱい突っ込んでいたら,何故か日語の TTF (フォント) が表示されなくなってしまいました.そんなこんなで今はビットマップな生活なんで

  • type punning と strict aliasing - memologue

    /.JのGCC-3.4リリースの話題を追っていたら、GCC3では-O2で-fstrict-aliasingが有効だから注意せよというポスト(http://slashdot.jp/comments.pl?sid=175355&cid=537217)があった。 strict aliasing については、Radium Software Developmentさんが詳しい。これは気にしておいたほうがよさそうだ。GCCの -fstrict-aliasing の説明は次。 コンパイルされている言語に適用可能な別名規則(aliasing rule)のうち最も厳密なものをコンパイラが前提することを許します。これによって、 C(およびC++)では式の型に基く最適化を動作させることになります。例えば、ある型のオブジェクトが別の型のオブジェクトと同一アドレスに位置することは、それら2つの型がほとんど同一でない

    type punning と strict aliasing - memologue
  • OBB vs AABB - Radium Software Development

    iPhoneの一般修理店は予約なしでも来店できる? 基的には飛び込みで修理に行ってもOK iPhoneを置いていたソファにうっかりと腰かけてしまい、パネルを割ってしまった、こんな時はスマホの一般修理店へ行きましょう。画面割れは、スマホやタブレットの故障原因として非常に多いものです。予約なしで突然お店に行っても平気かしらと、不安に思う方々もいらっしゃるかもしれません。結論としては特に問題はなく、予約なしで訪問しても画面割れの修理はお願いできます。 ただし他のサービス業のお店同様、予約なしの場合、お店が混雑していると順番待ちをしなければいけないです。特に繁盛しているスマホ修理のお店だと、行列が店内で出来ており、予約なしだと、自分の順番が巡ってくるまで長時間待たされる可能性があります。平日の朝、昼なら利用客が少ない場合が多く、飛び込みでも比較スムーズに修理が頼めます。 予約は入れた方が時短に、

  • RAIIもどき in C __attribute__((cleanup(fn)))

    gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです。 void Baz::boo() const { boost::mutex::scoped_lock lock(mutex); // ... return; // lock変数のデストラクタで自動開放。手動での開放不要 }でもC言語だと、当然ながら手動で開放しないといけません。複数箇所でreturnしている場合など、タイプが面倒臭すぎ。 int foo() { pthread_mutex_lock(&mutex); // ... if (hogehoge) { pthread_mutex_unlock

    RAIIもどき in C __attribute__((cleanup(fn)))
  • https://www.hi-matic.org/diary/?20070118

  • ビットシフトの落とし穴 - 算術シフトと論理シフト - 職業としてのプログラミング

    C言語には、ビットシフト演算子というものがあります。左シフト演算子(<<)と右シフト演算子(>>)です。同じビット演算でも、ビット単位の論理和(|)や論理積(&)、NOT(~)等はの方は、フラグ型の変数の処理で使われる事が多い気がしますが、ビットシフトの方は使用されるケースはあまりないかもしれません。 さて、このビットシフト演算子で時々問題になるのが、符号ビットが立っている時の右シフト演算です。見逃されがちなポイントは、 型によって挙動(算術シフトか論理シフトか)がかわることがある C言語の規格として、算術シフトか論理シフトかは不定 Nbitの算術シフトと2のN乗での除算は等価ではない といったところにあります。 算術シフト(shift arithmetic)と論理シフト(shift logical:又は0充填シフト)という言葉をご存知ない方のためにちょっと説明を書いておくと、シフトによっ

  • 最新Cコンパイラーの最適化事情 - Radium Software

    State of the art C compiler optimization tricks, Felix von Leitner, Linux Kongress 2009. 最近のCコンパイラーの最適化能力についてまとめたプレゼンテーション。定数の扱いやインライン展開などの基的な項目から始まって,分岐の削除やベクトル化, SIMD 化など,最新のコンパイラーに搭載されている様々な機能について調べている。 この手の分岐の削除はほとんどのコンパイラーで有効らしい。 ベクトル化については gcc がだいぶ頑張っている印象。 「gcc は全プラットフォームにおいてビデオコーデックプログラマーより賢い」 これらの最適化が実際のコードでどのように機能するか気になって逆アセンブリコードを覗いてみる人も少なくないと思うけれど,それを代わりにやってくれた感じだ。この手の話題に興味がある人ならば,目を通

    最新Cコンパイラーの最適化事情 - Radium Software
  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
  • C++ はなぜ人気がないのか : IT Pro 記者の眼

    2005年1月に出た「C++の設計と進化」(ソフトバンク パブリッシング発行)を読んだ。C++の設計者であるStroustrup自身が,C++の設計哲学や標準化されるまでの出来事を語ったである。原著が出たのは1994年とかなり古いが,日語版にはStroustrupによる「2005年のC++」という1章が加筆されている。原著を読まれた方も,とりあえず手にとってみてはいかがだろうか。 さて,書を読んで改めて感じるのが,日におけるC++の最近の評価が低すぎるのではないかということだ。Javaが普及した今となっては「もはや過去の言語」という声すら聞くほどだ。10年以上にわたってC++を触ってきた記者から見ると,悲しい限りである。 確かに,開発コストを考えると,業務システムの開発にC++がほとんど使われないのは仕方がない。しかし,実行速度やメモリー効率が重要なソフトや,コストを掛けただけの見

    C++ はなぜ人気がないのか : IT Pro 記者の眼
    tzt
    tzt 2009/07/14
    入門書で「cout << "Hello world." << endl;」を見た瞬間こりゃダメだと思って速攻で見切りをつけた。C++の設計者はヤバイ薬をキメてこの言語を作ったに違いない。