タグ

C言語に関するrin51のブックマーク (26)

  • open_memstream() - メモの日々(2017-03-07)

    ■ [c][c++] open_memstream() glibcなどにはopen_memstreamという関数がある。 FILE *open_memstream(char **ptr, size_t *sizeloc); これは自動的に伸長するバッファをバックエンドに持つFILEポインタを返してくれる。データ長が分からない文字列構築をするときなどに便利。なお、sizelocにNULLを指定することはできない模様。サンプルコードと実行結果をメモ。 #include <stdio.h> #include <stdlib.h> int main() { char* p; size_t size; FILE* fp = open_memstream(&p, &size); if (!fp) return 1; fputs("hello", fp); fflush(fp); printf("%s

    rin51
    rin51 2022/06/20
    > 自動的に伸長するバッファをバックエンドに持つFILEポインタを返してくれる
  • How to receive Kernel uevents with Netlink socket?

  • 高速逆平方根(fast inverse square root)のアルゴリズム解説 - 滴了庵日録

    高速逆平方根とは? C言語のコード 検証 アルゴリズムの要点 [1] 逆平方根の計算を対数・指数の計算に置き換える [2] 浮動小数点型の内部表現を利用した対数・指数の近似計算 [2.1] 対数の近似 [2.2] σの最適値 [2.3] 整数型での解釈 [2.4] 逆平方根の計算とマジックナンバー0x5F3759DF [3] ニュートン法による収束で精度アップ 感想 高速逆平方根とは? 高速逆平方根(fast inverse square root)とは、平方根の逆数 を高速に計算するアルゴリズムです。平方根の逆数は逆平方根とも呼ばれます。逆平方根はベクトルの正規化などに用いられるので、これを高速に計算できるアルゴリズムには大きなご利益があります。 参照: Fast inverse square root - Wikipedia C言語のコード 高速逆平方根の関数を示します。0x5F375

    高速逆平方根(fast inverse square root)のアルゴリズム解説 - 滴了庵日録
  • Opaque type example

  • DCL12-C. 抽象データ型は opaque な型を使って実装する

    DCL12-C. 抽象データ型は opaque な型を使って実装する 抽象データ型はオブジェクト指向言語であるC++Javaに限られたものではなく、C言語でも、作成し使用されるべきものである。抽象データ型が最も効果を発揮するのは、プライベート(opaque)データ型や情報の隠ぺいを実現するときである。 違反コード 以下のコード例は CERT が開発した managed string library に基づく。[Burch 2006]この例では、managed string 型およびこの型に対して演算を行う関数が、以下に示す string_m.h ヘッダファイルで定義されている。 struct string_mx { size_t size; size_t maxsize; unsigned char strtype; char *cstr; }; typedef struct strin

    DCL12-C. 抽象データ型は opaque な型を使って実装する
  • C言語でOpaqueポインタを使って構造体のメンバを隠蔽する - minus9d's diary

    C言語で、自作の構造体のメンバをユーザに開示しないテクニックとして、Opaqueポインタというものが知られています。今回は、書籍「C++のためのAPIデザイン」の3.1.6節を参考に、Opaqueポインタを使う簡単なサンプルを紹介します。 Opaqueポインタを使わない場合 人に関するデータを集めた構造体Personと、その構造体を使ったライブラリを作成することを考えます。以下にPerson.hのコードを示します。 #pragma once typedef struct _Person { int age; } Person; // 以下、Person構造体に関するAPI Person* createPerson(int age); // Person構造体のオブジェクトを生成 void printPerson(Person* ptr); // Person構造体を使った操作(メンバのプリ

    C言語でOpaqueポインタを使って構造体のメンバを隠蔽する - minus9d's diary
  • メガドライブ版ダライアス - 完成! | Arcade Cabinet

    2015年7月(46歳)から始めた、「C言語でのゲームプログラミングの学習」。当初の目標をほぼ達成することができました。「メガドライブ版ダライアス」完成です。C言語の勉強を始めてから約3年かかりました。ゲームバランス調整、動作確認、バグ修正などまだまだ改善の余地がありそうなので念のためβ版としています。 中学生の頃に一度挫折したゲームプログラミングですが、最近は沢山の書籍や、ネットでも多くの情報を得ることができます。またゲームプログラミングに必要なソフトも充実しています。 *ドットエディタ(EDGE, Photoshop)や、音楽作成ツール (DefleMask, VGM Maker)、秀逸なメガドライブ開発ツールであるSGDKなど。 またブログやツイッターでの皆様からの暖かいアドバイスや応援のメッセージのお陰で、モチベーションを3年間も維持することができました。自分だけの力では途中で挫折

    メガドライブ版ダライアス - 完成! | Arcade Cabinet
    rin51
    rin51 2018/06/04
    46歳からC言語を勉強しはじめて3年後にダライアスを作るのか。すごい
  • いやなブログ: リンクと同名のシンボル

    リンクと同名のシンボル C や C++ のプログラムで同じ名前のグローバルなシンボルが 2つ以上存在するとどうなるでしょうか。 Debian GNU/Linux sarge + GCC 3.3.5 での動作を見てみます。 静的リンクの場合 まず、次のようなファイル a.c があります。 a.c ではグローバルな関数 func() を定義しています。 #include <stdio.h> void func() { printf("func() in a.c\n"); } 次に、 b.c でも同様に func() を定義しています。a.c のものとよく似ていますが、 printf で表示されるメッセージは異なります。 #include <stdio.h> void func() { printf("func() in b.c\n"); } 最後に、 main.c では func() を呼び出

  • C言語(標準)にM_PIは無い - 簡潔なQ

    C言語で円周率πを使うには M_PI を使う、と経験で知っている人は多いが、あれは実はC言語の規格には含まれていない。むしろ、処理系がM_PIを定義してはいけない事情(c - Using M_PI with C89 standard - Stack Overflow)がある。 ここでは、C言語の最新規格であるC11と等価なN1570 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) を参考にする。これより古いC言語の規格でも同様だと思われる。 C言語の規格では、まず「標準に準拠したプログラム」は何かということを定義し、続いて「標準に準拠した処理系」は何かということを定義する、という手順を踏んでいる。 Strictly conforming program Strictly conforming programとは、最も移

    C言語(標準)にM_PIは無い - 簡潔なQ
  • Bubble sort singly linked list in C with pointers

  • 2016年、C言語はどう書くべきか (後編) | POSTD

    (前編はこちら: 2016年、C言語はどう書くべきか (前編) ) (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) システム依存の型 まだ「32 bitのプラットフォームでは32 bitのlong型、64 bitのプラットフォームでは64 bitのlong型がいい」という不満があるようですね。 プラットフォームに依存する2つの異なるサイズを使うため、 故意に コードを難しくすることを考えたくなければ、システム依存の型のために long を使おうとは思わないでしょう。 この状況では、プラットフォームのためにポインタ値を保持する整数型、 intptr_t を使うべきです。 モダン32-bitプラットフォームでは、 intptr_t は int32_t です。 モダン64-bitプラットフォームでは、 intptr_t は int64_t です。 int

    2016年、C言語はどう書くべきか (後編) | POSTD
  • 2016年、C言語はどう書くべきか (前編) | POSTD

    (訳注:2016/3/2、いただいた翻訳フィードバックをもとに記事を修正いたしました。) (訳注:著者のMattより、「文中で明言はしていないが、この記事の内容はx86-64 Unix/Linux/POSIXでアプリケーションをプログラミングする場合にフォーカスしている。他のプログラミング領域では、対象とするシステムに応じた(例: 8-bitの組み込みシステム、10年前のコンパイラ、多くの異なるCPUアーキテクチャで動く必要のあるアプリケーション、Win/Linuxでのビルド互換性など)特有のアドバイスが必要」との補足を頂いております。) 以下の文章は2015年の始めに書いたドラフトで、今まで公開していませんでした。私のドラフト用フォルダの中で誰の目も引かなかったため、大部分が書いた時のままです。公開するにあたり、単純に2015年を2016年に変更しました。 必要な修正、改善、苦情があり

    2016年、C言語はどう書くべきか (前編) | POSTD
  • JTN002 — Jera Design LLC

    JTN002 - MinUnit -- a minimal unit testing framework for CIntroductionUnit testing frameworks are quite popular in the object-oriented programming world. Frameworks like JUnit (for Java), SUnit (for Smalltalk), and CppUnit (for C++) provide a rich set of functionality. However, this rich set of functionality can be intimidating to someone who wants to do unit testing in a more constrained environm

  • 32bit/64bit 両対応な printf の書き方 - pyopyopyo - Linuxとかプログラミングの覚え書き -

    32bit/64bit両対応のコードを書いていると,よく printf() で引っかかります."%d"のような"書式"がややこしいからです. というわけで,変数の"型"と"書式"の対応を,表で整理してみました. 型 書式 注意事項 ssize_t %zd size_t %zu intmax_t %jd uintmax_t %ju ptrdiff_t %t signed char %hhd unsigned char %hhu short int %hd unsigned short int %hu int %d unsigned int %u long int %ld unsigned long int %lu long long int %lld unsigned long long int %llu int32_t %PRId32 以下,#include が必要(下記参照) uint3

    32bit/64bit 両対応な printf の書き方 - pyopyopyo - Linuxとかプログラミングの覚え書き -
  • はじめてのH8マイコン 基礎編<br><第22回>H8マイコンで必要となるC言語プログラミングの基礎知識…ポインタを理解しよう! - H8

    はじめてのH8マイコン 基礎編 <第22回>H8マイコンで必要となるC言語プログラミングの基礎知識…ポインタを理解しよう! これまでいくつかプログラム例を示してきましたが,「*」の付いた変数「*pdr」が出てきています.これは「ポインタ変数」と呼ばれ,H8マイコンの C言語プログラムではアドレスを指定してデータをやりとりする重要な用途に使われます.  そこで,今回はこのポインタについて解説していきましょう.「ポイ ンタを知らずにC言語プログラミングを語れない」と言われるほどポインタの概念はとても重要です.ポインタからC言語がわからなくなったという話もよく耳 にします.初心者にとってポインタの概念を理解することは,一般的に鬼門と言われておりますが,頑張っていきしょう.イメージさえつかむことができれば,それほどポインタは難しいものではありませんよ. ■ポインタとは? まずポインタという概

  • ときどきの雑記帖' 2013年6月(中旬)

    ■_ Some Dark Cornrers of C これは何ヶ月か前にも話題に上ってたはずだけど Some Dark Corners of C : programming Some Dark Corners of C : programming Anyone who write y+++++x deserves whatever pain the language may inflict upon them. Haven't you ever seen the "goes to" operator? int y = 10; while (y --> 0) { // As "y" goes to zero // Do stuff } Or "runs to" operator? int y = 10; while (y ----> 0) { // As "y" runs to zero /

  • 「C,C++捨てられるんじゃね?」「組み込みは?」「アセンブラで書けば?」「」

    便利なデバッガとか、周辺ツールのサポートとか、そういうのが揃ってはじめて、「使える」ようになると思うんですが……

    「C,C++捨てられるんじゃね?」「組み込みは?」「アセンブラで書けば?」「」
    rin51
    rin51 2012/08/17
    (´・ω・`) アイコンのせいで和む
  • ソースコードの脆弱性をチェックするツール、IPAが無償公開。C言語に対応

    IPA(独立行政法人情報処理推進機構)は、 C言語で作成されたソースコードに脆弱性が存在しないかどうかを検査するツール「iCodeChecker」を公開しました。無償で利用できます。 iCodeCheckerは、ソースコードの脆弱性が存在する箇所を検出し、修正例や脆弱性が悪用された場合の脅威についてのレポートを出力するツール。プレスリリースから引用します。 ツールは、脆弱性やソースコード検査技術を学習したい学生や開発者を対象に、利用者自身が作成したソースコード(C言語)を検査することできます。 ツールでは、ソースコードの脆弱性が存在する箇所を検出し、修正例や脆弱性が悪用された場合の脅威について解析したレポートを出力します。利用者はツールを通して、脆弱性を学習するとともに、ソースコードセキュリティ検査技術の有効的な活用方法を習得することができます。 配布形式は、VMイメージ、パッケージ

    ソースコードの脆弱性をチェックするツール、IPAが無償公開。C言語に対応
  • Cでのポインタの読み方

    Cでのポインタの読み方 Cのポインタの読み方は、ルールを知らないと摩訶不思議です。 ルールを覚えれば、 int (*p[5])[3]; char (*(*fp)(void))(int); なんてのも解読する事ができます。 大事な前程 ポインタを読む際には、「英語で読む」必要があります。 「え~、英語~」 と思う方もいるかもしれませんが、逆に日語で読む方が大変です。 基ルール ルール 後置演算子が優先。 関数の() 配列の[] 前置はあとで。 要は、「後ろに何かあったら、後ろが優先」です。 演算子の英語での読み方 * pointer to ... () function returning ... [] array of ... Lesson 1 まず、演算子が単独で出てくる場合です。 Lesson 1-1 pointer to ... int *p; これは、まずpを見ましょう。 i

  • やさしいCプログラミング

    このは,これからプログラミングを学ぼうとする初心者のために, 基的な事柄について解説しています.書の目的は,プログラムの よい書き方(プログラミング書法またはプログラミングスタイルと 呼ばれる)を身につけるきっかけを提供することです.読者には, コンピュータやプログラミングについての特別な知識は期待して いません.書で使用するコンピュータ言語は,Cよりはプログ ラミングの教育に適したModula-2風の疑似言語です.この言語は C言語が持つ文字列を置き換える機能(マクロ定義)を使って見 かけを変えているだけで,C言語そのものです.初心者がModula-2風C を用いることの利点は, プログラムを読みやすく,文法を覚えやすくする, C言語特有のわかりにくさを緩和する, C言語特有の起こしやすいエラーを未然に防ぐ, C言語特有の落し穴をふさぐ, C言語特有の曖昧な制御構造を避ける, 等

    rin51
    rin51 2012/01/15
    こういうコードはCプログラミング診断室で見たことある