タグ

Cに関するAkinekoのブックマーク (35)

  • Linuxカーネルで学ぶC言語のマクロ - 覚書

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。 #define swap(a, b) \ do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) 注目すべきはマクロの定義全体を囲んでいるdo { ... } while (0)という表記です。初見の人には何のことかわからないと思います。考えられる最も単純な定義から遡って、なぜこ

    Linuxカーネルで学ぶC言語のマクロ - 覚書
    Akineko
    Akineko 2020/06/28
  • GitHub - dalance/procs: A modern replacement for ps written in Rust

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - dalance/procs: A modern replacement for ps written in Rust
  • 私がC#の勉強のために必ずクローンしているGitHubリポジトリを紹介します - Alternative Architecture DOJO

    こんにちは。MLBお兄さんこと松村です。 今回は私がPCに必ずgit cloneしているC#系のGitHubリポジトリを紹介します。 どういったリポジトリであるか、リポジトリをクローンしている目的も併せて書いてみます。 とりあえず詳細はいいから、どんなリポジトリがあるか知りたい方はこちらをご覧ください。 gist.github.com それでは列挙していきます。(アルファベット順です) 常にクローンするもの dotnet-presentations/aspnetcore-app-workshop github.com ASP.NET Core 2.2でSPAのWebアプリケーションを作るワークショップです。 dotnet-presentations/aspnetcore-concepts-workshop github.com 前述の dotnet-presentations/aspnet

    私がC#の勉強のために必ずクローンしているGitHubリポジトリを紹介します - Alternative Architecture DOJO
    Akineko
    Akineko 2020/01/14
  • Cello - もはや別物、C言語で高レベルプログラミングを実現するライブラリ | ソフトアンテナ

    C言語は機械語やアセンブリ言語といった低水準言語に近く、最近流行のPythonRubyといった高水準言語で利用できるさまざまな便利な機能を使用することができません。例えば文字列にも専用の型が存在せず、さまざまな落とし穴に注意しつつ慎重に使用する必要があるのです。 日紹介する「Cello」は、このなにかと不便なC言語で、高レベルプログラミングを実現するユニークなライブラリです。 Cellは以下の機能を実現するC言語用ライブラリです。 一般的なデータ構造 ポリモーフィック関数 インターフェイス/タイプクラス コンストラクタとデストラクタ オプションのガベージコレクション 例外 リフレクション 作者のDaniel Holden氏は、Ubisoft Montrealのアニメーション研究員で、C言語の可能性を追求するためのファンプロジェクトとしてCelloの開発を始めたと開発の動機を説明していま

    Cello - もはや別物、C言語で高レベルプログラミングを実現するライブラリ | ソフトアンテナ
  • セルフホスティングCコンパイラを書いた - 茅の下

    セルフホスト(自分自身をビルド)できるCコンパイラnoccを書きました。 github.com はじめに 去年の夏あたりからCコンパイラを書くのが流行っていたのでやってみました。 例によって@rui314さんの8cc、9ccと低レイヤを知りたい人のためのCコンパイラ作成入門を参考にしていますが、バックエンドにはLLVMを使用しています。 工夫した点 以下、作る上で工夫した点です。 言語仕様に制限をつける C言語の全仕様を網羅しようとすると到底完成は不可能なのでサポートする言語仕様に制限をつけまくりました。 制限には例えば以下のようなものがあります。 変数宣言が初期値を取れない。 複数の変数をコンマ区切りで宣言できない。 typedef宣言や型のconst修飾などはその語順を固定している。 型解析時は型のconst修飾を無視する。 関数のプロトタイプ宣言はトップレベルでのみ行える。 関数ポイ

    セルフホスティングCコンパイラを書いた - 茅の下
    Akineko
    Akineko 2019/04/14
  • 【Python C API入門】C/C++で拡張モジュール作ってPythonから呼ぶ -前編-|はやぶさの技術ノート

    こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。 仕事の都合もあり「C言語 ⇒ C++Python」の順にプログラミング言語を習得しました。 最近は、PythonとC/C++両方を使って仕事をしています。 Pythonでプログラミングをしていると…

    【Python C API入門】C/C++で拡張モジュール作ってPythonから呼ぶ -前編-|はやぶさの技術ノート
  • すごいC言語のマクロ __is_constexpr - Qiita

    #define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) #include<stdio.h> #define Def 10 #define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) enum test{Enum}; int main(){ int Val = 10; const int Const_val = 10; int a = __is_constexpr(Val); int b = __is_constexpr(Const_val); int c = __is_constexpr(10); int d = __

    すごいC言語のマクロ __is_constexpr - Qiita
    Akineko
    Akineko 2018/04/20
  • C言語でインクルードするだけで使えるNon-movingで正確なコピーGCを作った - Qiita

    インクルードするだけで使えるNon-movingで正確なGCをC言語用に作りました。 行数がコメントを除いて100行に満たない非常に小さなライブラリです。 GCのアルゴリズムとしてはCheneyのコピーGCを採用しています。 通常のCheneyのコピーGCではメモリ空間のうち半分が無駄になってしまいメモリ効率が悪かったり、 GC発生時にオブジェクトが移動してしまいC言語のようなポインタを直接触れる言語との相性が悪いという欠点がありました。 今回はヒープ全体を二重連結リストとして管理することでそのような問題を解決しています。 ちなみにこれはTreadmill GCのアイデアと同じです。(が、アルゴリズム自体はTreadmill GCではありません。) APILinuxのlist.hに非常に近い見た目になっています。 ある構造体をgcで管理したい場合はstruct gc_head型のメンバを

    C言語でインクルードするだけで使えるNon-movingで正確なコピーGCを作った - Qiita
  • Cのプロダクトを作るためにやったこと - Tomohisa Oda

    今年に入って Octopassというプロダクトを公開しました。それは、Linuxのユーザや権限をGithubのTeamと連携して運用を楽にするというツールでした。色んな方々のご協力により、多くのRetweetやはてぶいただいたことで、ある程度、Octopass を必要としそうな人の目に触れたのではないかと思っています。(Githubのスター数が少ないのは今後の課題)その中で「すごく便利」「ぜひ導入したい」というフィードバックは、継続して機能追加していくというモチベーションにつながっていて、非常にありがたいです。 さて、この Octopass は、Linuxユーザ名前解決をするためにの glibc の libnssモジュールをCで実装しています。cgoやその他の言語でShared Objectを吐き出しても良かったのですが、それだと技術的挑戦が足りないとして、触れてこなかったCに挑戦しました

    Cのプロダクトを作るためにやったこと - Tomohisa Oda
  • linuxカーネルで学ぶC言語のマクロ - Qiita

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。

    linuxカーネルで学ぶC言語のマクロ - Qiita
  • K&R malloc/free作ってみた - narihiro.info(動画)

    K&Rにのってたmalloc/freeを作ってみました。(約60分) 正気の沙汰とは思えないほど長いですね。反省。 まろっくはむずかしい #include <stdio.h> #include <stddef.h> #include <stdlib.h> /* K&R malloc Heap +--------------------------------------------------------------------- | alloc |header next ...........| allocated |header next.... | +--------------------------------------------------------------------- ^ +-----------------------------^ +-------------

    Akineko
    Akineko 2013/12/03
  • Cello • High Level C

    #include "Cello.h" int main(int argc, char** argv) { /* Stack objects are created using "$" */ var i0 = $(Int, 5); var i1 = $(Int, 3); var i2 = $(Int, 4); /* Heap objects are created using "new" */ var items = new(Array, Int, i0, i1, i2); /* Collections can be looped over */ foreach (item in items) { print("Object %$ is of type %$\n", item, type_of(item)); } /* Heap objects destructed via Garbage

  • Glibc malloc internal

    2. 今日は何の話? libc でもっとも良く使われる関数、 malloc と free の実装の解説 もっと一般的に言うと、プロセスのアドレス空間のうち、 heap 領域とよばれる、場所を操作する関数の説明 解説というと聞こえはいいが、そんな大層なものじゃない 3. Linux での process address space model kernel stack text mmap data bss heap 矢印はデータ量の増加と ともに、伸びる方向 使用中 使用中 使用中 今日は、ここ、 heap と呼ばれる領域のお話 low high free free free 4. 古典的 malloc プログラミング言語 C (いわゆる K&R) で紹介された初期の Unix の malloc 実装 使用中 使用中 使用中 free listの head 使用中 ・ free list を

    Glibc malloc internal
    Akineko
    Akineko 2012/12/27
  • CODE CODIUM./Scribbles/webmaster/314

    コンピュータにちょっと詳しい人なら一発で解るポインタの利点 前提知識 前提知識として、ショートカットファイル(シンボリックリンク)、ファイル、ファイルパス、ハードディスクの役割について知っていれば、たぶん一発で解ります。 ポインタ変数をコンピュータで喩えると… ポインタ変数をコンピュータで喩えると、ポインタ変数、変数、アドレス、メモリ空間の関係は、それぞれ ポインタ変数=ショートカットファイル 変数=ファイル アドレス=ファイルパス メモリ空間=ハードディスク に対応します。察しの良い人ならこれだけでポインタの利点が分かると思いますが、以下で詳しく説明します。 ショートカットファイルの利点、ポインタ変数の利点 たとえば、C:\documentsに巨大なサイズのファイルがあったとします。あなたは 「このファイルにデスクトップ上からでもアクセスしたい」 と思いました。でもコピーすると時間かかる

    Akineko
    Akineko 2012/06/28
  • 世界で2番目にわかりやすいポインタの話

    これ以上に解りやすく説明できるという人は、@super_rti までURLを教えて下さい。世界一わかりやすいの看板を差し上げます。

    世界で2番目にわかりやすいポインタの話
    Akineko
    Akineko 2012/06/12
  • プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!

    僕がプログラミングに触れた当時は、プログラミングといえば「まず C 言語」でした。それから 10 年以上が経ちました。学校の授業や企業の研修では未だに C 言語を教えているところがあるようです。関数型プログラミング言語という波が来ている 2012 年にもなって未だに C 言語をやっているというのはまるで進歩が無く残念な気もしますが、比較的多くのプログラマに浸透している共通言語を最初に教えるというのは、一方では喜ばしい事だと解釈する事もできるのかもしれません*1。まぁとにかく、意にせよ不意にせよ現場で プログラム初心者に C 言語を教える羽目になった 人がたくさんいて、プログラム初心者なのに C 言語を学ばざるを得なくなった 若者がたくさんいるということです。 C 言語を教えるときに避けて通れないのがポインタで、プログラム初心者が C 言語を学ぶときにやたらとつまずく人が多いのがポインタ

    プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!
    Akineko
    Akineko 2012/06/12
  • あらゆるCプログラマが未定義の動作について知るべきこと - YAMDAS現更新履歴

    LLVM Project Blog: What Every C Programmer Should Know About Undefined Behavior #1/3 LLVM Project Blog: What Every C Programmer Should Know About Undefined Behavior #2/3 LLVM Project Blog: What Every C Programmer Should Know About Undefined Behavior #3/3 コンパイラ基盤 LLVM のブログで、未定義の動作という C 言語のダークサイドについての記事が3回シリーズで公開されている。 C 言語で未定義の動作を実行したら、「鼻から悪魔が飛び出しても文句が言えない」というジョークは有名で……いや、そんなのを知ってるのは年寄りくらいか(参考:nasa

    あらゆるCプログラマが未定義の動作について知るべきこと - YAMDAS現更新履歴
    Akineko
    Akineko 2011/05/23
  • GNU Pth - The GNU Portable Threads

    Multithreading Libraries The following is a collection of references to all known multithreading libraries for Unix operating systems. Pth - GNU Portable Threads http://www.gnu.org/software/pth/ ftp://ftp.gnu.org/gnu/pth/ Ralf S. Engelschall, 1999-2006 CMU LWP - CMU Lightweight Processes ftp://ftp.coda.cs.cmu.edu/pub/coda/src/ Larry Raper et all, 1984-2000 FSU Pthreads - FSU/PART POSIX Threads htt

  • C言語の代表的なウェブリソース10選 - YAMDAS現更新履歴

    Top 10 C Language resources that will turn you into a better programmer - C and C++ Programming Resources 今更 C 言語かと言われそうだが、Linux カーネルだって、我々が利用している LL 言語の多くだってこの言語で書かれているのである。ワタシ自身は未だどの言語よりCを愛している。 以下に C 言語に関してウェブに公開されている代表的なリソースを挙げていく。さすがに更新が長らく止まっているものが多いが、それでも有用な情報源には違いない。ネタ元は Hacker News。 C Programming Notes Programming in C - UNIX System Calls and Subroutines using C. C Lesson by Chris Sawtell

    C言語の代表的なウェブリソース10選 - YAMDAS現更新履歴
    Akineko
    Akineko 2011/02/22
  • [開発][C言語]超テキトー図解ポインタ - chocolate holic

    まだ途中。書き次第随時追記していきまする。間違いとか分かりにくい表現があったら遠慮無く指摘してくだしあ。

    Akineko
    Akineko 2010/11/08