Movatterモバイル変換


[0]ホーム

URL:


はてなブックマークアプリ

サクサク読めて、
アプリ限定の機能も多数!

アプリで開く

はてなブックマーク

タグ

関連タグで絞り込む (50)

タグの絞り込みを解除

C言語に関するrichard_rawのブックマーク (58)

  • コンパイラが作ったバイナリをつなぎ合わせるプログラム 「lld」の作者が語る、リンカの仕組み | ログミーBusiness

    Kernel/VM探検隊はカーネルや仮想マシンなどを代表とした、低レイヤーな話題でワイワイ盛り上がるマニアックな勉強会です。植山氏は、制作中のリンカである「mold」について発表しました。全2回。前半は、リンカの概要について話しました。 LLVMのリンカ「lld」オリジナルの作者植山類氏:植山類です。今僕が作っているmoldというリンカについて発表します。 今回の発表の概要です。リンカが何かを知っている人はそんなにたくさんいないと思うので、まず説明します。次に、「mold」のポイントは速いことなのですが、速いと何がうれしいのかを説明します。そのあと、どれくらい速いのかを説明した上で、どう実現されているのか、概要を紹介します。詳細になると何時間あっても終わらないので、かなりハイレベルな話をします。 自己紹介のスライドを入れていませんが、僕はリンカを何度か作ったことがあって、LLVMのlldの

    コンパイラが作ったバイナリをつなぎ合わせるプログラム 「lld」の作者が語る、リンカの仕組み | ログミーBusiness
    richard_raw
    richard_raw2022/01/07非公開
    分かりやすい。何十年も前からある枯れた技術ですがまだ改善の余地があるんですな、と前に #rebuildfm で聴いたときに思いました。
    • 2で割ることと3で割ること - Qiita

      この記事でお題にするのはCPUレジスタ上の整数除算です。以下、単に除算とも書きます。 除算は非常に高コストな演算なため、コンパイラは最適化によって、できるだけ整数除算を別の計算に置き換えようとします。 最適化ができる場合の一つとして、割る数が定数である場合があります。頭のいいコンパイラは、除算を乗算とビットシフト等を駆使した演算に置き換えます。この記事では、そういった最適化の背景にある理屈を部分的に解説します。 計算機環境としてはモダンなx86CPUを仮定します。したがってレジスタは32/64ビットであり、負数は2の補数表現になっています。ある程度は他の命令セットでも通用する話になっているかもしれません。 そもそも整数の除算とは プログラミングにおける整数の除算の定義について確認します。整数$n$を整数$d$で割るとき $$ n = q \times d + r $$ が成り立つように除

      2で割ることと3で割ること - Qiita
      richard_raw
      richard_raw2020/12/09非公開
      なるほど、3の場合はこうなるのか。
      • 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言語のマクロ - 覚書
        richard_raw
        richard_raw2020/06/30非公開
        空のdo whileは真似して使っています。引数の文字列化は試してみたい。
        • 【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報

          C言語で引数なしの関数を書くときに void を書かないのと書くのとで挙動が違うなんて話を聞いたことはないでしょうか? つまり void func() {} と void func(void) {} で挙動が違うという話ですね。 自分も話だけ聞いたことがあったものの2つがどう違うのかはわかっていなかったため、C言語の規格を読みながら何が違うのかを調べてみました。 結果だけ述べると、この2つの書き方は同じように見えて実は明確な違いがあり、引数がない関数を定義/宣言する場合には後者を使うのが適切です。 とは言え、2つの書き方で違いがあるとかほんとかよ?と思う方もいると思うので、まずはこの二つがどう違うのか見ていきましょう。 2つの関数の書き方の違い 早速ですが、以下のプログラムを見てみましょう。 // func_empty.c void func() {} int main(void) { f

          【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報
          richard_raw
          richard_raw2019/04/19非公開
          voidがないとチェックされない、と。知らなかった……。/ニューラルネットのソースがK&Rスタイルだったなあ。
          • 【Python C API入門】C/C++で拡張モジュール作ってPythonから呼ぶ -前編-|はやぶさの技術ノート

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

            【Python C API入門】C/C++で拡張モジュール作ってPythonから呼ぶ -前編-|はやぶさの技術ノート
            richard_raw
            richard_raw2019/01/21非公開
            なるほどなるほど。/無言ブックマークばっかりですな!
            • _T("")マクロだのL""マクロだのLPCTSTRだのの世界一詳しい解説

              _T("")マクロについて 初心者の方へ 下の説明を読むのが面倒なら次のように設定を変更すれば わずらわしい思いはしなくてもよくなります。 また、下の設定をすればLPCTSTRとか訳の分からないものはconst char *と同じ意味になり、 自分でコードを書く時にも_T("") などと書く必要もなくなります。 VisualStudio2005での設定例(2003や2008でもほとんど同じです):プロジェクト名で右クリックしてプロパティを選択 (ここでは太文字でcppTestと書いてあるやつ) 左側のツリーで構成プロパティ→全般を選択するとこのようなものが出てくる。 デフォルトでは文字セットのところが『Unicode 文字セットを使用する』となっているはず。 これを『マルチバイト文字セットを使用する』に変更してOKを押すと設定完了。 上級者向けの説明 おそらくVisual Studio2

              richard_raw
              richard_raw2018/01/16非公開
              なんか文字化けしまくると思ったらこれか!
              • 非推奨だった bool 型に対するインクリメント演算子を削除 [P0002R1] - cpprefjp C++日本語リファレンス

                このページはC++17に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要C++17ではbool型に対する前置および後置のoperator ++を削除する。 bool型に対する前置および後置のoperator ++とはC++98の時点で非推奨になっていた機能である。 具体的にどのような働きをするのかというと、以下のように値をtrueに書き換える機能をもつ。 #include <iostream> int main() { bool b = false; const bool b1 = ++b; std::cout << std::boolalpha << b1 << std::endl; // => true const bool b2 = ++b; std::cout << std::boolalpha <<

                richard_raw
                richard_raw2017/07/19非公開
                「これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。」ワァオ。
                • Cのプロダクトを作るためにやったこと - Tomohisa Oda

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

                  Cのプロダクトを作るためにやったこと - Tomohisa Oda
                  richard_raw
                  richard_raw2017/03/07非公開
                  スタイルフォーマット、Unit Test、Makefile、パッケージ作成、Integration Testについて。Criterionは便利そうですねえ。
                  • linuxカーネルで学ぶC言語のマクロ - Qiita

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

                    linuxカーネルで学ぶC言語のマクロ - Qiita
                    richard_raw
                    richard_raw2017/03/03非公開
                    黒魔術だ……。/さっそく、何もしないマクロ定義を利用させていただきます。
                    • Linux共有ライブラリの簡単なまとめ - wagavulin's blog

                      Linuxで共有ライブラリ(*.so)を作るようになったのでちょっと勉強してみた。今までは使うだけだったので、以下のようなことは知っていた。 作るときはgccの-sharedオプションを使う。 使うときはgccの"-lライブラリ名"でリンクするライブラリを指定する。 リンク時のライブラリ探索パスは-Lオプションで指定する。 実行時のライブラリ探索パスは/etc/ld.so.confに書いてあるディレクトリ。環境変数LD_LIBRARY_PATHでも指定可能。 ライブラリを作るときは、.cから.oを作るときに-fPICをつけるといいらしい。 新しくライブラリを入れたときはldconfigするといいらしい。 逆に今まであまり知らなかったこと。 ほとんどのライブラリはlibhoge.so, libhoge.so.1, libhoge.so.1.1のように3つくらいのファイルがあり、libhoge

                      Linux共有ライブラリの簡単なまとめ - wagavulin's blog
                      richard_raw
                      richard_raw2017/01/26非公開
                      私も最近組み込みLinux用の共有ライブラリをビルドしてるので参考になります。
                      • 標準出力と標準エラー出力 - printfデバッグTips - 碧色工房

                        プログラミングを行う上で、printfを使った標準出力は 一番最初の「Hello World」から登場し、当にずっとお世話になるものだ、 デバッグをする上でデバッガが使えるようになっても、 完全にprintfなしでとは行かないかもしれない。 というわけで、 このprintfを使ったデバッグ出力を行う上でのTipsについて、 いろいろと解説してみようと思う。 では、早速だが、printfの他に、 ファイルへの出力を行うときに利用するfprintfという関数がある。 最初期ではないにせよ、プログラミングの勉強のかなり始めうちに使うことになるはずだ。 manを使って定義を確認すると以下のようになっている。 #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *

                        標準出力と標準エラー出力 - printfデバッグTips - 碧色工房
                        richard_raw
                        richard_raw2017/01/11非公開
                        なぜかperror()を知っててstrerror(errno)を知らなかったのでブックマーク。
                        • GitHub - hak7a3/8cc.tex: C Compiler written in TeX

                          You signed in with another tab or window. Reload to refresh yoursession. You signed out in another tab or window. Reload to refresh yoursession. Youswitched accounts on another tab or window. Reload to refresh yoursession. Dismiss alert

                          GitHub - hak7a3/8cc.tex: C Compiler written in TeX
                          richard_raw
                          richard_raw2016/11/07非公開
                          TeXでCコンパイラ????
                          • CPP(コンパイルしない方の関数型なC言語)プログラミング入門。とりあえずFizzBuzzまで - Qiita

                            Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

                            CPP(コンパイルしない方の関数型なC言語)プログラミング入門。とりあえずFizzBuzzまで - Qiita
                            richard_raw
                            richard_raw2016/09/28非公開
                            面白い!まさかプリプロセッサでループできるとは思わなかった。
                            • gcov の使い方 - まめめも

                              concov のドキュメントを書こうと思ったけれど、何から書くか困ったので、とりあえずその前に gcov の使い方とはまりどころを書いてみます。 gcov とは C 言語で書かれたプログラムのカバレッジを測定するツールです。gcc に付属しています。 基的な使い方 こういうコードがあるとする。 /* test.c */ #include <stdio.h> int foo(int x, int y) { return x + y; } int bar(int x, int y) { return x - y; } int main(void) { printf("%d\n", foo(2, 3)); printf("%d\n", foo(3, 4)); return 0; } コンパイルする。-coverage をつけると gcov 用のオブジェクトファイルが生成される *1 。 $ g

                              gcov の使い方 - まめめも
                              richard_raw
                              richard_raw2016/08/30非公開
                              gcc附属のカバレッジ測定ツール。テストの網羅率とかに使うのかしら。
                              • Microsoft、C言語を拡張する「Checked C」を開発中

                                fossBytesに6月14日(米国時間)に掲載された記事「Microsoft Open Sources "Checked C" — An Extended Version Of C To Avoid CodingErrors」が、Microsoftにより開発が進められている「Checked C」と呼ばれる技術について伝えた。「Checked C」はC言語を拡張する機能で、より安全なコーディングが可能になるとされている。Microsoftのソフトウェアの多くはC/C++で開発されている。C言語はポインタの扱いを間違えると来アクセスしてはいけないメモリを指した操作をしてしまうことがあり、これがバグや脆弱性の原因の1つになっている。「Checked C」はこうした問題を回避することを目指してC言語の機能を拡張するもので、ポインタに対してあらかじめ範囲情報を持たせておき、ポインタの指し示す

                                Microsoft、C言語を拡張する「Checked C」を開発中
                                richard_raw
                                richard_raw2016/06/17非公開
                                Cppcheckがなんだって?(違う)
                                • C言語でターミナルで表示される文字をカラー表示させる : Serendip – Webデザイン・プログラミング

                                  サンプルコード #include <stdio.h> int main(void) { /* 背景色の指定 */ printf("\x1b[40m"); /* 背景色を黒に */ printf("背景が黒\n"); printf("\x1b[41m"); /* 背景色を赤に */ printf("背景が赤\n"); printf("\x1b[42m"); /* 背景色を緑に */ printf("背景が緑\n"); printf("\x1b[43m"); /* 背景色を黄色に */ printf("背景が黄色\n"); printf("\x1b[44m"); /* 背景色を青に */ printf("背景が青\n"); printf("\x1b[45m"); /* 背景色をマゼンタに */ printf("背景がマゼンタ\n"); printf("\x1b[46m"); /* 背景色をシア

                                  richard_raw
                                  richard_raw2016/05/24非公開
                                  C言語でも簡単にカラフル文字出力できたのか。/ちなみにシェル組み込み関数のprintfだと「x1b」の代わりに「e」ですな。
                                  • Cプログラミング診断室 - 藤原博文

                                    はじめに 開院準備 昔むかし/ レベル差/教育/ ネットワーク/ 情報集め/ 隠すことについて/ プログラムコンテスト/ ドキュメント/ 楽するように/ 手抜きと下手の違い/ 開院 第1部 外来 第1章 普通の初心者 最初から充実した(!?)プログラムが登場 関数を短くし、コメントを改善する 上手になる秘訣/ プログラムの紹介/ 何だ、このプログラムは!!/ 短くするには/ コメントについて/ 無駄な努力をやめよう/ 名前/ 気になる個所/ 修正プログラム/ 課題/ まとめ 第2章 これでもプロ 売りものであるにもかかわらず、超きたない! 構造的な欠陥の指摘〜引数、ポインタの活用 プログラムの紹介/ 「超」基的問題点/ 関数分解/ 構造的欠陥/ 引数を使おう/ ポインタ/ その他/ まとめ(修正プログラム) 第3章 上司が問題 まさに驚異的なプログラムの見というべき 内容の修正から、

                                    richard_raw
                                    richard_raw2016/05/18非公開
                                    大量のグローバル変数を宣言したヘッダファイルに遭遇したので第5章を参考にしました。というか全部読みたい。
                                    • Python Tutor - Python Online Compiler with Visual AI Help

                                      Online Compiler,AI Tutor, and Visual Debugger forPython,Java, C,C++, andJavaScriptPython Tutor helps you doprogramming homework assignments inPython,Java, C,C++, andJavaScript.It contains a step-by-step visual debugger andAI tutor to help you understand and debug code. Since 2010, over 20 million people in more than 180 countries have usedPython Tutor to visualize over 300 million pi

                                      richard_raw
                                      richard_raw2016/03/24非公開
                                      PythonだけでなくJava, JS, Ruby, C++までビジュアライズしてくれるサービス。使ってみよう。
                                      • 2016年、C言語はどう書くべきか (前編) | POSTD

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

                                        2016年、C言語はどう書くべきか (前編) | POSTD
                                        richard_raw
                                        richard_raw2016/02/19非公開
                                        やばい全然馴染みがない。もうC++でいいや(えー
                                        • コールグラフを描く2つのツール(EgyptとCodeViz) by Inquisitor

                                          休日(でなくてもいいけれど)の読書の題材としてコンピュータ・プログラムを選んだとき、単にコードを読むだけでなく、何か図形的な補佐が欲しいと思うことがある。 オブジェクト指向の言語だとUML図が便利だが、別のパラダイムではあまり役に立たない。 たとえばC言語では、プログラムの構成要素である関数(というか手続き)の呼び出し合う関係を視覚化できると少しうれしい(「すごくうれしい」とまではいかない)。 次のようなコードがあったとする。 #include <stdio.h> int fib(int n) { if (n<3) return 1; return fib(n-2)+fib(n-1); } int main() { int i; for (i=1; i<=10; ++i) { printf("fibonacci(%d) = %d\n", i, fib(i)); } return 0; }

                                          コールグラフを描く2つのツール(EgyptとCodeViz) by Inquisitor
                                          richard_raw
                                          richard_raw2015/08/24非公開
                                          静的なコールグラフを出力したいなーと思って探したら見つけた。どちらもUbuntuのパッケージには無さそう。

                                          お知らせ

                                          公式Twitter

                                          • @HatenaBookmark

                                            リリース、障害情報などのサービスのお知らせ

                                          • @hatebu

                                            最新の人気エントリーの配信

                                          処理を実行中です

                                          キーボードショートカット一覧

                                          j次のブックマーク

                                          k前のブックマーク

                                          lあとで読む

                                          eコメント一覧を開く

                                          oページを開く

                                          はてなブックマーク

                                          公式Twitter

                                          はてなのサービス

                                          • App Storeからダウンロード
                                          • Google Playで手に入れよう
                                          Copyright © 2005-2025Hatena. All Rights Reserved.
                                          設定を変更しましたx

                                          [8]ページ先頭

                                          ©2009-2025 Movatter.jp