タグ

C言語に関するrryuのブックマーク (6)

  • 表紙 - 本物のC

    このサイトは「物の C 言語」について学習する機会の提供を目的としています。 「物の」とはつまり、 標準規格(仕様)が C 言語をどういうものとして定めているか C プログラムが実際に CPU をどう動かすか という二つの意味合いに於いてです。 どうも巷間にはその辺りを気にせず何となくで書かれた資料が多い様なので、このサイトにより少しでも世界が最適化される事を期待します。 権利について 当然ですがこのサイト全体は著作権法により保護されています。法と良心に則って御利用下さい。 連絡はcontact<アット>real-c.infoまで。

    rryu
    rryu 2022/03/02
    「標準規格(仕様)が C 言語をどういうものとして定めているか」って特定の処理系に依存せずにあの抽象化されまくっている標準規格だけで説明するなんてことができるのかと思ったらそういうものではなかった。
  • 旧石器時代のポインタをご利用の皆様へ ~provenance入門~ - Qiita

    現代のプログラミング言語ではポインタは単なるアドレスではなく,provenanceを伴った参照として扱われています. 世界は既に変わっています. 概要 ポインタは単なるアドレスではありません. ポインタにはprovenanceという,どのオブジェクト由来かの情報が含まれています. Provenanceを使うことで,最適化が効きやすくなったり,堅牢なプログラムを書きやすくなったりします. 追記: 次の英語記事を読むとprovenanceが必要な理由についてもっとよく知ることができます.クリックしよう!!!!(2020-12-15) https://www.ralfj.de/blog/2020/12/14/provenance.html ポインタはアドレスではない 次のCプログラムを見てみましょう. #include <stdio.h> #include <string.h> int main

    旧石器時代のポインタをご利用の皆様へ ~provenance入門~ - Qiita
    rryu
    rryu 2020/09/08
    元々C言語では配列要素へのポインタ以外の整数演算は未定義動作でそもそもご利用できないので旧石器時代も何も無いのだった。
  • C で関数に * や & を付けられる件の説明 - Qiita

    規格として C11 (n1570) を参照する。 注意: 途中に入れた図が崩れるようなら、半角・全角比が 1:2 になるようなフォントを使って閲覧してください。 現象 wandbox で実行 ソース: ( &printf)(" &printf = %p\n", &printf); printf (" printf = %p\n", printf); ( *printf)(" *printf = %p\n", *printf); ( **printf)(" **printf = %p\n", **printf); (***printf)("***printf = %p\n", ***printf); この現象を解説する。 関数呼び出し まず、関数呼び出しについての規定を見る。 The expression that denotes the called function shall have

    C で関数に * や & を付けられる件の説明 - Qiita
    rryu
    rryu 2019/08/21
    関数ポインタをデリファレンスしたら何になるのかを考えて関数指示子をひねり出したらなんか無限ループするようになったとかなんだろうか。
  • C言語がコンパイル~実行されるまで - Qiita

    記事の内容 以下のソースコードがコンパイル~実行されるまでに、何が行われるのかを理解する。 細かいオプションや処理の詳細は追わない。 #include <stdio.h> #define MESSAGE "hello world\n" int main(int argc, char *argv[]) { printf(MESSAGE); return 0; } ]$ uname -rm 3.10.0-957.10.1.el7.x86_64 x86_64 ]$ gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions

    C言語がコンパイル~実行されるまで - Qiita
    rryu
    rryu 2019/05/02
    リンカ沼とローダ沼にはまりそうな勢いで掘り下げている。
  • 本の虫: 誤り:paizaの問題はC++17でも成り立つ

    この記事は間違っていた。 この変更では、インクリメント演算子の副作用のコミット順序はまだ規定されていない。 paizaが以下のような質問を出している。 int i = 0; のときに評価値が1になるのは — paiza[パイザ] (@paiza_official) December 26, 2016 @paiza_official 【補足】C言語,C++,Javaを想定しています — paiza[パイザ] (@paiza_official) December 26, 2016 問題は、int i = 0 ;であるとき、以下の式を評価した結果が1になるのはどれかという問題だ。 i++ + ++i ++i + ++i i++ + i++ ++i + i++ C言語では、この式を評価した結果は未定義である。 C++14までは、この式を評価した結果は未定義である。 C++17では、サブ式の評価順序

    rryu
    rryu 2016/12/27
    遂に未定義じゃなくなったのかと思ったら違ったようだ。Javaでは定義されていたはず。
  • 論文紹介: 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 - みずぴー日記
    rryu
    rryu 2016/06/08
    inline使いの葛藤がおもしろい。
  • 1