タグ

C++に関するy_rのブックマーク (120)

  • C++コードのデトックス - Qiita

    -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused project(detox) cmake_minimum_r

    C++コードのデトックス - Qiita
  • c2e01b17fa037460937f

    こんにちは。 最近はC言語で書かれたAndroid/iOS SDKのプロジェクトjoinしまして、ビルドや単体テストの自動化について色々試行錯誤しております。 最初はMakefileで色々頑張っていたのですが、前から試してみたかったninja-buildというビルドツールを使ってみて、意外と便利だったため共有します。 apple/swift のビルドにも使われていたので、CやC++の皆さんの間では有名なのかもしれませんね。オープンソースで、C++で実装されているようです。 https://ninja-build.org https://github.com/ninja-build/ninja *Windowsでも使えるようですが、この記事ではMacで動作確認しております。 homebrewでインストールできました。

    c2e01b17fa037460937f
    y_r
    y_r 2018/10/23
    ”差分ビルドが賢いninja-build”
  • 最近気になったC++のライブラリとか - Qiita

    はじめに 先日 C++初心者会 と Boost.勉強会 #17 東京 に参加した。この2つの勉強会で紹介されたライブラリやC++1zで組み込まれる予定の機能などから、私が気になったものを紹介する。 勉強会の内容については 歌舞伎座.tech #8 「C++初心者会」を開催した や Boost.勉強会 #17 東京に参加してきた で紹介されている。 LINQ for C++ 発表者: mikiemon_h さん 資料: LINQ for C++のご紹介 LINQとは LINQとは言語統合型クエリ(Language Integrated Query)のことで、コードでクエリ式の記述を可能にする機能のこと。 LINQがあるからC#を使う という人がいるほど便利な機能である( グラニがC#にこだわる理由 )。 LINQは.NET Framework3.5から利用できるようにり、C#の他、VBやF#

    最近気になったC++のライブラリとか - Qiita
  • C++でLINQライクな処理(LINQ for C++による方法) - whoopsidaisies's diary

    LINQ for C++ LINQは.NET Framework3.5から組み込まれた機能で,C#等の言語でSQLのデータベース操作のようなことを可能とする.「C# is LINQ」と言う方までいほどに便利な機能. しかし,C++/CLIはLINQに対応する予定はないとのこと.そこで,LINQに似た機能をC++に提供してくれるのがLINQ for C++である.というわけでLINQ for C++を使ってみる. 導入 LINQ for C++はヘッダファイルひとつで実装されているので,以下のページからダウンロードしてきてインクルードするだけで使用できる.NuGetからのインストールも取得可能である. LINQ for C++ - Home 使用例1 以下に使用例を示す.LINQ for C++を使って,テストの成績のうち国語と英語がともに50点以上の人のリストを取得している. 普通の配列に

    C++でLINQライクな処理(LINQ for C++による方法) - whoopsidaisies's diary
  • Extension methods in C++

  • Pipable functions in C++14

    Let’s look how to implement this in C++14. First, lets start by implementing a pipe_closure class to handle a function with just one parameter: template<class F> struct pipe_closure : F { template<class... Xs> pipe_closure(Xs&&... xs) : F(std::forward<Xs>(xs)...) {} }; template<class T, class F> decltype(auto) operator|(T&& x, const pipe_closure<F>& p) { return p(std::forward<T>(x)); }

  • メモリモデル?なにそれ?おいしいの? - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2014の21日目にエントリしています。 内容はC++メモリモデルと逐次一貫性についての概説記事となっています。 flickr / nomadic_lass もくじ 忙しい人のための「C++メモリモデル」 C++メモリモデル一問一答 ソフトウェアからみた「C++メモリモデル」 “メモリ”という共有リソース C++ソースコードが実行されるまで メモリの一貫性と整合性 逐次一貫性モデル is Easy ハードウェアからみた「C++メモリモデル」 ハードウェア・メモリ一貫性モデル C++コンパイラの責任と自由 強いメモリモデル vs. 弱いメモリモデル 逐次一貫性モデル is Hard (文のみ約9600字) まえがき When your hammer is C++, everything begins to look like a thumb

    メモリモデル?なにそれ?おいしいの? - yohhoyの日記(別館)
  • 「pthreadサポート」の意味するところ - yohhoyの日記

    ある処理系が “POSIXスレッド(pthread)標準をサポートする” とき、処理系(実行環境を含む)で担保すべき事項と、利用者(アプリケーションプログラマ)が守るべき制約についてメモ。 アプリケーションをプログラマの意図通り実行させるための、処理系/利用者間の責任分解点は「メモリ同期(memory synchronization)」により定義される。 利用者:複数スレッドからの少なくともどれか1つが書込操作となる変数アクセスの場合、“メモリ同期関数” を用いた排他制御により変数アクセスが同時に生じないよう保証すること。 全てが読込操作である変数アクセスの場合、複数スレッドからの変数アクセスを同時に行ってもよい。(そのようなコードを書いても、意図通り実行されることが保証されている。) 処理系:コンパイル時に最適化を行う場合でも、あるスレッド内での変数アクセス操作を “メモリ同期関数” 呼

    「pthreadサポート」の意味するところ - yohhoyの日記
    y_r
    y_r 2018/06/28
    POSIX の規格により volatile 必要なし
  • Are mutex lock functions sufficient without volatile?

    y_r
    y_r 2018/06/28
    見解が分かれているが "pthred_mutex_xxx でメモリバリアがはられているので大丈夫" が正しいっぽい
  • 組み込みと Pimpl イディオム | 組込屋

    2017年12月27日2020年1月17日 Pimpl イディオムと呼ばれるテクニックがあります。イディオムとは「慣用句」とか「言い回し」といった意味の単語で、要するにパターンのことです。 正直に言うと、私はこのテクニックが嫌いです。どうやってもソースコードを汚すことになるし、その犠牲によって得られる恩恵が大したものに思えない。特に組み込みでは。 しかし最近、これをうまく使っている人を見て、少しだけ考えを改めました。もしあなたがライブラリを提供する立場で、そのファイル構成をシンプルにして提供したいと思うのであれば、Pimpl イディオムを局所的に使うことには一考の余地があります。 メリットとされていること Pimpl とは “Pointer to Implementation"、つまり「実装へのポインタ」から来ているプログラミング用語です。一度 “Pimpl" をググってみてください。大抵

    組み込みと Pimpl イディオム | 組込屋
    y_r
    y_r 2018/06/26
    "私が考える Pimpl の用途はただ一つ。インクルードの連鎖を断ち切って、ライブラリのユーザーに向けて、提示するファイルを絞り込むことです。"
  • Can you use keyword explicit to prevent automatic conversion of method parameters?

    y_r
    y_r 2018/05/24
    メソッドの引数を explicit にする。explicit にしたい引数を template でうける private メソッドを宣言して定義しない。
  • 忘れがちな C++ の標準ライブラリの使い方 - Qiita

    実は,C++ 標準ライブラリで基的なアルゴリズムは用意されている.案外これが知られてなかったり忘れられてたりするのでメモしておく. std::max_element, std::min_element min_element, max_element は,最小値,最大値のイテレータを返してくれる関数. std::vector<int> vec(100); for (size_t i = 0; i < vec.size(); ++i) { vec[i] = i; } std::random_shuffle (vec.begin(), vec.end()); // std::*_element は,イテレーターを返すので '*' で値を取得する int min = *std::min_element(vec.begin(), vec.end()); int max = *std::max_e

    忘れがちな C++ の標準ライブラリの使い方 - Qiita
  • C++11からC++17を駆け抜けるC++講座 - Qiita

    初心者C++Advent Calendar 2017 この記事は初心者C++Advent Calendar 2017 15日目の記事です << 14日目|C++を学ぶにあたって参考にした書籍・Webサイト || 16日目|何か書きます >> 今週3目、このAdCでも3目の記事です。期限に間に合わなかったでござる・・・。 今年の初心者AdC++は平和ですね・・・。 はじめに みなさま、ナマステ。さて、この記事のタイトルを見て、「時代・・・サトウキビ・・・忍者・・・うぅ、頭が」となった人は私と趣味が似ています・・・って話をするのは何回目だろうか。 先日ニコニコ(デクレッシェンド)が発表されましたが、Qiitaはクレッシェンドしていって貰いたいものです(なおデザイン改悪)。 (追記:と、この記事を書いていたら百花繚乱氏が登場した動画と生放送サービスに対する意見交換会が開かれましたね。われこそ

    C++11からC++17を駆け抜けるC++講座 - Qiita
  • DCL38-C. フレキシブル配列メンバには正しい構文を使用する

    DCL38-C. フレキシブル配列メンバには正しい構文を使用する フレキシブル配列メンバ(flexible array member)とは、2 つ以上の名前付きメンバをもつ構造体の最後のメンバが不完全配列型、つまり、構造体の中で配列のサイズが明確に指定されていない、特殊な型になっている配列を指す。struct hack と呼ばれるこの手法は広く使われており、さまざまなコンパイラが対応している。それゆえ、フレキシブル配列メンバの宣言にはさまざまな構文が使用されてきた。C 標準に適合した実装では、C 標準によって有効であると保証されている構文を使用すること。 フレキシブル配列メンバは、C 標準のセクション 6.7.2.1 パラグラフ 18 において次のように定義されている[ISO/IEC 9899:2011]。 特別な場合として、2 つ以上の名前付きメンバをもつ構造体の最後のメンバは、不完全配

    DCL38-C. フレキシブル配列メンバには正しい構文を使用する
    y_r
    y_r 2017/12/11
    構造体の最後のメンバのサイズ以上の領域を確保して、そのメンバを実質的に不定長配列として扱うのは未定義ではない。
  • https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf

    y_r
    y_r 2017/12/11
    C++ のたぶん committee draft。WEB 上で簡単に参照する場合用
  • alloca関数 - Qiita

    C言語で動的なサイズのメモリ確保が必要となれば、典型的にはmallocとfreeの出番ですが、allocaというものもあります。 C言語での変数の寿命 オブジェクト指向な言語の多くでは、ガベージコレクタが入っているので、「オブジェクトの寿命」≒「オブジェクトへの参照が存在する間」ということになります。これに対して、C言語(やC++)では、ガベージコレクタのような高度な仕組みはないので、変数の寿命は次の2つのどちらかになります。そして、C11で加わった可変長配列を別として、配列を確保するときもサイズは固定のしか取れません。 自動変数…スコープに入ったところで変数が用意され、スコープを抜けたところで解放される 静的変数・外部変数…プログラムの開始から終了まで存在し続ける これらに当てはまらない操作をしようと思えば、ライブラリ関数を使ってポインタ経由で使うほかありません。 allocaとは ふつ

    alloca関数 - Qiita
    y_r
    y_r 2017/05/21
    alloca 知らんかった...
  • C/C++ 迷信集 | 株式会社きじねこ

    C/C++ を使うプログラマは大勢います。しかし、その多くは OJT を通して言語を学んだのではないでしょうか? 実はそこに大きな落とし穴があります。 コンピュータや工学のことをよく知らない人たちは、時代の先端を歩むプログラマには「迷信」など無関係だと信じて疑わないかも知れません。しかし、迷信や誤解はどんな世界にも常に存在しています。 というわけで、ここでは C/C++ にまつわる迷信、誤解、よくある間違いを採り上げていきます。非常に後ろ向きな企画ですが、暇つぶし気分転換に読んでみてください。もしかすると、ご自身が迷信にとらわれていたことに気付くかもしれません。 追記(2009/03/15) このコーナーでは、C/C++ にまつわる迷信、誤解、よくある間違いを扱っています。決して「迷信」だけではないのですが、タイトルにはすべて[迷信]を付けています。 これは、主に検索エンジンでタイトルを見

  • [Linux][C/C++] backtrace取得方法まとめ - Qiita

    __builtin_return_address() を使用する __builtin_return_address() を利用することで、callerのアドレスを取得できる。 引数の数値を増やすことで、更に上の呼び出し元を参照できる。 #include <stdio.h> #define __USE_GNU #include <dlfcn.h> void hoge() { Dl_info info; dladdr(__builtin_return_address(0), &info); fprintf(stderr, "%s : __builtin_return_address => %p\n", __func__, __builtin_return_address(0)); fprintf(stderr, "%s : Dl_info.dli_fname => %s\n", __func_

    [Linux][C/C++] backtrace取得方法まとめ - Qiita
  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

    y_r
    y_r 2017/02/16
    困った時の奥の手
  • C++1zの言語拡張まとめ - Faith and Brave - C++で遊ぼう

    2017年中に改訂される予定のC++14の次のバージョン、仮称C++1zの更新内容をまとめました。正式名称はISO/IEC 14882:2017、通称C++17になる予定です。 C++1zの概要 C++17は、C++11ほど大きな変更はありませんが、重要な言語機能(構造化束縛とか)や、広く適用できるライブラリ機能が多く入っています。ライブラリは、ファイルシステムが入るのが大きいですね。ようやく標準ライブラリのみで、ファイルサイズを取得したり、ファイルのコピーや移動などを扱えるようになります。 策定体制として、Study Group (SG)と呼ばれる専門家グループがたくさん作られ、そこで同時並行に議論、策定が進められていた仕様のうち、固まったものがいくつかC++1zで導入されます。 それぞれの専門家グループで考えられた仕様はTechnical Specification (TS)という単位

    C++1zの言語拡張まとめ - Faith and Brave - C++で遊ぼう
    y_r
    y_r 2017/02/02