タグ

Cに関するzetamattaのブックマーク (68)

  • C言語のジェネリクスサポート - その手の平は尻もつかめるさ

    全く知らなかったのだけれど,C11の新機能として_Genericという組み込み関数が提供されていた. Generic selection - cppreference.com jameshfisher.com というのをこのブログを見て気づいたんですが, #include <stdio.h> int main() { char* x = "foo"; printf("Type of x is: %s\n", _Generic(x, char*: "string", int: "int")); return 0; } これは完全に動くコード (最初よく文章を読んでなくて,大方擬似コードだろうと侮っていたら当に動いて驚いた). だいたい分かると思うんですが,上記のコードは char*の引数が_Genericに渡されるとstringという文字列を出力し,intの引数が与えられるとintという文

    C言語のジェネリクスサポート - その手の平は尻もつかめるさ
    zetamatta
    zetamatta 2018/07/30
    曰く「どちらかと言うとType Assertionに近いイメージ」…なるほど
  • 簡単なプログラミング言語を作るライブコーディング

    完成したソースコードはここにあります。 https://gist.github.com/rui314/a13acb5bbea0fb4bd66eaa4db4ac93d2

    簡単なプログラミング言語を作るライブコーディング
    zetamatta
    zetamatta 2018/07/28
    by Rui Ueyama さんのスーパーコーディング
  • 例え話をしないC言語のポインタの説明 | 右や左の旦那様

    まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。 それでもなお「ポインタがわかりづらい」という人が後を絶ちません。 もういっそのこと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。 Hello, Worldより簡単に サンプルコード 以下のコードを考えます。 void main() { int a; int b; int c; a = 1; b = 2; c = a + b; } 「#include <stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。 まぁ見ての通り、どこにも何も出力されませんが。 このプログラムは、「c = a + b」

    例え話をしないC言語のポインタの説明 | 右や左の旦那様
    zetamatta
    zetamatta 2018/07/28
    デバッガを使ってポインタを説明する…だとッ
  • include-what-you-use - A tool for use with clang to analyze #includes in C and C++ source files

    A tool for use with clang to analyze #includes in C and C++ source files "Include what you use" means this: for every symbol (type, function variable, or macro) that you use in foo.cc, either foo.cc or foo.h should #include a .h file that exports the declaration of that symbol. The include-what-you-use tool is a program that can be built with the clang libraries in order to analyze #includes of so

    zetamatta
    zetamatta 2018/07/26
    必要のないヘッダファイルを除去するツール…と聞いて
  • Precise garbage collection for c

    2. Precise Garbage Collection for C 著者 Jon Rafkind, Adam Wick, John Regehr, Matthew Flatt 入手先 http://www.cs.utah.edu/~regehr/papers/ismm15-rafkind.pdf 3. CのプログラムでもGC使いたい • 普通、保守的 GCでしょう • たとえば、Boehm GCとか • でも、長い時間使ってるとメモリー使用量 がすごく増大する場合があるみたいだよ • 証拠は? • それは、次のスライドの心だー 4. PLT Schemeにあった怖い話 • PLT Schemeを使用したプログラム環境 DrSchemeは毎日再起動をしなければならなかっ た。でも、正確なGCに変えたら再起動が必要なく なった • バイトコードとドキュメントを生成すると、正確な GCだと2

    Precise garbage collection for c
    zetamatta
    zetamatta 2018/06/27
    C言語で「保守的でない、正確な GC」を実現してみた話。malloc に皮を被せて、GC用の情報をかませるみたい
  • すごい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
    zetamatta
    zetamatta 2018/04/22
    曰く「定数式の0を(void *)にキャストするとNullポインタ定数になります。しかし、定数式でない0をキャストしてもNullポインタ定数にはなりません。0番地を差すポインタとなります」
  • コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記

    僕は先日、「コンパイル時Cコンパイラ」なるプログラムをつくって、公開した。 「コンパイル時Cコンパイラ」とは、コンパイルするとC言語プログラムのコンパイルが行われるというようなC++プログラムである。 C++のコンパイル中に C言語プログラムのコンパイルを行う、 "コンパイル時Cコンパイラ"をつくりました #ELVMhttps://t.co/kKiLU3rLFX— うどん (@kw_udon_) 2016年11月18日 自分で書いておいてなんだが、「なんのこっちゃ」という感じではある。(ちゃんと記事中で説明する。) 実際、変なプログラムではあるのだが、とても嬉しいことに多くの人に面白がっていただき、予想だにしなかった大きな反響をいただいた。 Hacker Newsで1位になったり、LLVMの公式ブログで紹介されたり、果てはC++の作者であるBjarne Stroustrupにも言及されるに

    コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記
    zetamatta
    zetamatta 2017/02/04
  • https://www.kernel.org/doc/Documentation/process/coding-style.rst

    zetamatta
    zetamatta 2017/01/03
    Linux Kernel のインデントは8桁、タブも8桁と規定する文書
  • ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza times

    Photo by Alan Becker Capuyá 青木です。 先日、paizaのツイッターアカウント(@paiza_official)で出題した四択問題について、皆様からたくさんのご指摘・ご批判をいただいたので、その経緯と結論をお伝えします。 次のような問題を考えて出題しました。 int i = 0; のときに評価値が1になるのは— paiza[パイザ] (@paiza_official) 2016年12月26日 【補足】C言語,C++,Javaを想定しています— paiza[パイザ] (@paiza_official) 2016年12月26日 当初は、それぞれの評価値は順に2, 3, 1, 2となり、3つめの"i++ + i++"の選択肢が答えとなることを想定していました。 ですが、しばらくすると、次のようなリプライやツイートをいただきました。 全部C(たぶんC++/Javaも)だ

    ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza times
    zetamatta
    zetamatta 2016/12/29
    「想定言語はJavaです」などと、当初、想定してなかったのに想定していたなどと偽るのはよくないな
  • C コンパイラに変な処理系定義のあるプラットフォーム - NAKAMURA Minoru's Diary (2016年12月)

    2002 | 10 | 11 | 12 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1

    zetamatta
    zetamatta 2016/12/27
  • C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) C言語の規格のリビジョン間には微妙な違いがありますが、このことを利用して「C90、C99、C11のどれとしてコンパイルされたかどうかにより、違う挙動をする」というプログラムを作ることが可能です。同様に、C++はほぼC言語の上位互換ですが、C言語とC++で違った結果を生み出すプログラムも存在します。 これは2015年の International Obfuscated C Code Contest (難読Cコード・国際コンテスト)への Don Yangの投稿 において、 C89、C99、C11、C++98、C11のどれとしてコンパイルされるかによって異なる出力を生成するプログラムを作成するのに使われています。C90の場合は、以下のような星形を出力します。 **************************

    C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD
  • 論文紹介: The Evolution of C Programming Practices: A Study of the Unix Operating System 1973–2015 - みずぴー日記

    ICSE 2016勉強会に参加するために論文リストを確認していたら、40年間のC言語のプラクティスの変遷を追った論文がおもしろかったので紹介する。 対象の論文 論文: The Evolution of C Programming Practices: A Study of the Unix Operating System 1973–2015 論文中で使われれたデータ: https://github.com/dspinellis/unix-history-repo 要約 過去40年間のUnixのソースコードを分析し、コーディングスタイルの変化を調査した。その結果、以下のことが分かった。 新しい言語機能は価値のあるものならば採用される レジスタ割り当てをコンパイラに任せるようになる スペースをどこにいれるかなどのコードの書き方が統一されていく 分析対象 1972年以降にリリースされた計66個

    論文紹介: The Evolution of C Programming Practices: A Study of the Unix Operating System 1973–2015 - みずぴー日記
    zetamatta
    zetamatta 2016/06/11
    曰く「40年間のC言語のプラクティスの変遷を追った論文がおもしろかったので紹介する」
  • 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

    zetamatta
    zetamatta 2016/01/22
    な、なんだこりゃ。var とか foreach とかをライブラリレベルで実現しているのか?
  • Soup.io

    zetamatta
    zetamatta 2014/10/13
    C言語版npm みたいな奴
  • Soup.io

    zetamatta
    zetamatta 2014/06/28
    曰く「C言語版の bundler であったり、carton であったり、npm だったりする訳です」
  • mrubyを小さくしたり大きくしたりした話 - スペクトラム

    最近mrubyにコミットしているので自分の活動をまとめます。 mrubyを小さくした話 mrubyでは、文字列の扱いはシンプルにchar*を構造体でラップしていました。 struct RString { MRB_OBJECT_HEADER; mrb_int len; union { mrb_int capa; struct mrb_shared_string *shared; } aux; char *ptr; }; そのため1つの文字列毎に、構造体分と文字列分の2回のmalloc/freeが発生していました。 ここでCRubyのRStringを見てみます。 #define RSTRING_EMBED_LEN_MAX ((int)((sizeof(VALUE)*3)/sizeof(char)-1)) struct RString { struct RBasic basic; union {

    mrubyを小さくしたり大きくしたりした話 - スペクトラム
    zetamatta
    zetamatta 2014/03/15
    あー、構造体の末尾に char[1]を付けるテクニック、「Embed-String」って呼べばいいのか
  • はてなハイク サービス終了のお知らせ

    平素より「はてなハイク」をご利用いただき、ありがとうございます。 「お題でつながるミニブログ」としてご利用いただいていた「はてなハイク」は、2019年3月27日をもちまして、サービスの提供を終了させていただきました。 これまでご利用いただきましたユーザーの皆さまに深く感謝いたします。 誠にありがとうございました。 詳しくは下記をご覧ください。 http://labo.hatenastaff.com/entry/2018/11/19/113653 株式会社はてな

    zetamatta
    zetamatta 2013/04/06
    下手なコメント入れんでも、普通に「if( (w>>=1)==0) w=1;」の方がいいだろうなぁ
  • COM インスタンスを作成する

    ここの備忘録は、あくまでも走り書き程度のメモ的なものですので気をつけてください。 そのままでもちゃんと動くもの、手を加えないとだめなものなど、未完成レベルのコードです。ので、そのまま引用してしまうなど、プログラムを理解する知識のない方は利用しないでくださいね。 今回は Visual Studio .NET の Visual C++ 7.0 で作成した ComTest という COM コンポーネントを同じく Visual C++ 7.0 のプログラム内で使用するという感じのお話です。VC++ 6.0 とは少しやり方が違ったようなので、まとめて見ました。 ComTest というコンポーネントには、IComTest インターフェイスと、CComTest という CoClass が用意されているものとします。タイプライブラリファイルは _ComTest.tlb です。

    zetamatta
    zetamatta 2013/03/08
    COMを使う C++ アプリケーションで下手にスマートポインタを使うと相手は死ぬ
  • http://www.d3.dion.ne.jp/~fut_nis/Other/index.html

    zetamatta
    zetamatta 2013/03/06
    C言語での大規模開発の味方 GLib の貴重な日本語資料が!
  • errno - はじめてのにき(2013-03-02)

    _ errno http://htmlpreview.github.com/?https://github.com/akr/socket-test/blob/master/results.html#errmsg これはたすかるな => perror した結果からエラーコードがわからない気がするってたまに思うな => なんか既視感があるな => あった http://d.hatena.ne.jp/shinichiro_h/20060702#1151811151 (22:52)

    zetamatta
    zetamatta 2013/03/04
    OS別のperror の出力から、エラーコードを得る