タグ

C++とコンパイルに関するiwwのブックマーク (19)

  • basic_stacktrace - cpprefjp C++日本語リファレンス

    namespace std { template <class Allocator> class basic_stacktrace; using stacktrace = basic_stacktrace<allocator<stacktrace_entry>>; } 概要 basic_stacktraceは、現在位置からその関数がどこで呼び出されたかの履歴を取得するためのクラスである。この機能は、デバッグに役立つ。 プラットフォームごとのデフォルトのアサーション機能は、その失敗時にバグの全体像を説明できないため、問題を特定するために十分な情報を提供しない。このクラスを使用することで、ユーザーはデバッグのために必要十分な情報を任意に取得できる。 このクラスは、アロケータ対応コンテナ、シーケンスコンテナ、逆順コンテナの要件を満たす。ただし、 const修飾されたコンテナに対して定義されたムー

  • g++: internal compiler error: Killed (program cc1plus) が出た時

    libtool: compile:  g++ -DPACKAGE_NAME=\"nysol_mcmd\" -DPACKAGE_TARNAME=\"nysol_mcmd\" -DPACKAGE_VERSION=\"3.0\" "-DPACKAGE_STRING=\"nysol_mcmd 3.0\"" -DPACKAGE_BUGREPORT=\"info@nysol.jp\" -DPACKAGE_URL=\"\" -DPACKAGE=\"nysol_mcmd\" -DVERSION=\"3.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1

    g++: internal compiler error: Killed (program cc1plus) が出た時
  • 216624 – net/delegate: fails to build with clang 4.0

    iww
    iww 2023/10/17
    ordered comparison of pointer with integer zero。 IStrマクロはただのcharの配列定義なので、ここはコンパイルが通りさえすれば良い
  • C++03とC++11の違い: 宣言子編

    京都C++勉強会の宣伝のために、C++03とC++11の違いを、少しづつ解説することにした。 今回は、宣言子だ。 C++11にはリスト初期化のNarrowing Conversionが禁止された。 以下のような合法なC++03コードが、C++11では違法となる。 // C++03では合法 // C++11では違法 int a[] = { 1.0 } ; C++11では、リスト初期化というものを新たに導入し、従来aggregateにのみ許されていた{ }による初期化を、ユーザー定義型のクラスにももたらした。この心機能の追加にあたって、リスト初期化では、浮動小数点数から整数型や、より表現できる範囲が狭い可能性のある型への暗黙の変換(例:doubleからfloat、intからshort)を、縮小変換(narrowing conversion)と名付け、明確に禁止した。 もし、どうしても型変換を行

    iww
    iww 2023/10/17
    『いつか、暗黙の型変換が一切廃止される日をこの目で見たい。』 まだ来ない
  • Adjust Variable Tracking Assignment Length

    iww
    iww 2021/03/08
    気にしなくてもいいやつっぽい
  • constexpr - cpprefjp C++日本語リファレンス

    概要 constexprは、汎用的に定数式を表現するための機能である。 constexprは、「constant expression (定数式)」の略語である。 この機能を使用することで、コンパイル時に値が決定する定数、コンパイル時に実行される関数、コンパイル時にリテラルとして振る舞うクラスを定義できる。 定数式の例として、パラメータの値を2乗して返す関数square()は、以下のように記述する: #include <cassert> constexpr int square(int x) { return x * x; } int main() { constexpr int compile_time_result = square(3); static_assert(compile_time_result == 9, "result must be 9"); int runtime_

    iww
    iww 2018/04/23
    C++14では if文もfor文もオッケーになった
  • Visual StudioでLinux向けにMakefileプロジェクトを作ってリモートビルドする – Bakulog

    初歩的なとこで突っかかったのでメモ程度に。 記事ではVisual StudioのプラグインであるVisual C++ for Linux Developmentに最近追加された機能を紹介します。 まずVisual C++ for Linux Developmentとは何かという話ですが、これは名前の通りVisual StudioでLinux向け開発をサポートするプラグインです。 プラグイン自体は以前から公開されていて、クロスコンパイルに関する方法の解説記事が上がっていたりします。 Visual C++ for linux Development を軽く使ってみた Visual C++ for Linux Developmentつかってみようとしたらハマったけど動いた さて。ここからが題ですが、2016年8月19日に同プラグインではMakefileプロジェクトが新たにサポートされました。

    Visual StudioでLinux向けにMakefileプロジェクトを作ってリモートビルドする – Bakulog
  • C++の未定義の挙動で呼ばれないはずの関数が呼ばれる場合

    Krister Walfridsson’s blog: Why undefined behavior may call a never-called function 以下のようなコードをClangでコンパイルすると、 #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } Clangは以下のような最適化されたコードを吐く。 main: movl $.L.str, %edi jmp system .L.str: .asciz "rm -rf /" これは以下のようなコードと同じだ。

    iww
    iww 2017/09/26
    CやC++は未定義や不定が多いので、きちんと定義してほしい。
  • 2つのチャームクォークを持つ新バリオン「Ξcc++」を初めて発見したとCERNが発表 - GIGAZINE

    CERNが2つのチャームクォークを含む新物質「Ξcc++」を発見したとEPS会議で発表しました。これまで存在が予想されていた「2つの重いクォークを持つバリオン」が初めて発見された例です。 Observation of the doubly charmed baryon Xicc++ - lhcb_paper_2017.07.06.pdf (PDFファイル)http://press.web.cern.ch/sites/press.web.cern.ch/files/file/press/2017/07/lhcb_paper_2017.07.06.pdf LHCb announces a charming new particle | CERN https://home.cern/about/updates/2017/07/lhcb-announces-charming-new-particl

    2つのチャームクォークを持つ新バリオン「Ξcc++」を初めて発見したとCERNが発表 - GIGAZINE
  • Wandboxを支える技術(2017年版) - Qiita

    Wandbox は、オンラインでコンパイルや実行が試せるサービスで、主に私(@melponn) と @kikairoya で作っています。 以前 Wandboxを支える技術 というのを書いていたのですが、そこからかなり変わっているため、改めて今の中身がどうなってるかについて書いていきます。 Wandbox は、Wandbox 体と、各種コンパイラをビルドするための Wandbox Builder に分かれています。 ソースコードは wandbox と wandbox-builder にあります。 2019/9/26 追記: Wandbox のビルドを CMake に移行した話 を書きました 犬小屋と牛舎 Wandboxはバックエンドとフロントエンドで分かれていて、フロントエンド側が 犬小屋(kennel) 、バックエンド側が 牛舎(cattleshed) という名前になっています。 犬小

    Wandboxを支える技術(2017年版) - Qiita
  • Clang - Wikipedia

    Clang ([ˈklæŋ]:クランのように発音[5]) は、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンド英語版)である。OpenMPディレクティブ[6]や、OpenCL C/C++カーネル言語[7]も正式サポートしている。バックエンドにLLVMのコンパイラ基盤を使用しており、LLVM 2.6以降はLLVMのリリースサイクルに組み込まれている。 Clang/LLVMベースの派生プロジェクトとして、RenderScript(英語版)、CUDAのNVCC[8]、ROCm(英語版)のHIP-Clang[9]といった、Cライクなドメイン固有言語 (DSL) を組み込んだGPGPUフレームワークにおけるコンパイラフロントエンドとしても採用されている。 プロジェクトの目標は、GNUコンパイラコレクション (GCC) を置き換えるこ

    Clang - Wikipedia
    iww
    iww 2016/11/21
    『[ˈklæŋ]:クランのように発音』 クラン
  • とても賢いコンパイラーの逆襲

    The Hacks of Life: The Dangers of Super Smart Compilers Clangの最適化が未定義の挙動を検出してコード片を消し去ってしまったことに引っかかった開発者の嘆き。 今日初めて、RenderFarmのDSF render(global scenaryを作成するのに使っている内部ツール)をClangで最適化コンパイルして実行した。 結果はsegfaultだった。これは驚きだ(そして自身消失だ)。というのも、最適化していないデバッグビルドは問題なく動くし、GCCでコンパイルされた最適化ビルドも正しく動く。-O0ではバグがない(つまり#if DEVコードのバグではない)ので、「最適化は何をやっているんだ」の時間だ。 大量のprintfと試行錯誤の結果、最適化は以下のようなコード片を丸ごとすっ飛ばしていることが判明した。 for(vector<me

  • C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう

    Results of the Grand C++ Error Explosion Competition 少し前に、C++のコンパイルエラーの長さを競うコンテストが開催されていました。 受賞のカテゴリは2つあり、ひとつめは最小コードで最大のコンパイルエラーを出した人、もうひとつは芸術的な評価による受賞です。 最小コードで最大のコンパイルエラー この部門で優勝したのはEd Hanwayさんという方で、ソースコード量に対して59億倍のコンパイルエラーメッセージを出力したそうです。 それには、自身を2回インクルードするという手法が使われていたそうです。 #include ".//.//.//.//jeh.cpp" #include "jeh.cpp" 次点として、インクルードに後方参照を使用した、7億9千万倍のコンパイルエラーを出力するコード: #include "set>.cpp" #incl

    C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう
    iww
    iww 2014/03/26
    想像すらしなかった世界だ怖い
  • clangでc++を試して四苦八苦したメモ - 筆者は病気シリーズ 3

    何の変哲もないHelloWorld。 #include <iostream> int main() { std::cout << "Hello, おにいちゃん!!" << std::endl; return 0; }こいつをclangをつかってコンパイル。 # clang -xc++ hello.cpp /tmp/cc-x0SPbV.o: In function `__cxx_global_var_init': hello.cpp:(.text+0xc): undefined reference to `std::ios_base::Init::~Init()' hello.cpp:(.text+0x30): undefined reference to `std::ios_base::Init::Init()' /tmp/cc-x0SPbV.o: In function `main':

    clangでc++を試して四苦八苦したメモ - 筆者は病気シリーズ 3
  • C++ デフォルト引数はプロトタイプ宣言だけにする default argument given for parameter

    このドキュメントの内容は、以下の通りです。 はじめに デフォルト引数とは サンプルコード コンパイルするとデフォルト引数でエラーが出る 何が悪いのか? 2020年の環境では まとめ はじめに C++言語 は、精力的に新しい機能が実装され、GNU GCCやClangなどの新しいバージョンが次々とリリースされます。次々と新しいプログラミング言語が開発され、便利なスクリプト言語が次々と登場していますが、C言語やC++言語は、いまでも根強い人気があるように思います。組み込み系で使われていたり、やはり実行速度が速い、といったメリットがあるからなのではないか、と思っています。 GNUGCCの 古い g++(コンパイラ) でコンパイルするときは、問題にならなかったけど、いつの間にかエラーになってコンパイルできなくなってしまった、というお話です。 どういうわけか、古いコンパイラを使わないといけない環境に長

  • 実行時型情報

    オブジェクトの型を知る C++のようなオブジェクト指向言語では、ポリモーフィズムをサポートしています オーバーライドで知ったように、場合のよっては実行されるまで性質がわからないオブジェクトが存在します この柔軟性はプログラムの効率に非常に大きな影響を与えます しかし、実行中に現在のオブジェクトの型を知る必要があるケースもあります といって、コンパイル時にオーバーライドされた仮想関数の型を知ることはできません そこで実行時型情報という機能を用いて、実行中にその型を調べる必要があります 実行時型情報は RTTI(Run-Time Type Identification) とも呼ばれます この機能を用いることで、ポリモーフィッククラスの型の操作などが動的に行えます 実行時型情報を得るには typeid 演算子 を用います この演算子は const type_info & を返します type_i

  • Xcode 4 でデフォルトになった LLVM って何?

    こんにちは。開発担当の金内です。 Xcode 4 は UI もすっかり変わりましたが、ビルドの要であるコンパイラもデフォルトが変更されています。その新しいコンパイラのキーワードが「LLVM」です。いまいち聞き慣れない方もいると思うので、今回はその LLVM について簡単にご紹介します。 ざっくりとした結論から言ってしまえば、Xcode における LLVM は従来のデフォルトコンパイラである GCC を置き換えるものです。LLVM には次のような特徴があります。 ・コンパイルが速い ・コンパイルされたコードが速い ・エラーメッセージがわかりやすい ・他のツールと連携しやすい いいことばかりですね。 しかし、コンパイラは要となる重要なコンポーネントなので、互換性などへの配慮から、Apple は GCC からの移行を少しずつ段階的に進めています。 実際、Xcode 4.0 でのデフォルトは完全に

    Xcode 4 でデフォルトになった LLVM って何?
  • 定義済みマクロ - redstrange Wiki*

    標準規格 C言語 __DATE__ ソースのコンパイル日付 __FILE__ ソースのファイル名 __func__ 関数名(Visual Studio.NET以降では、__FUNCTION__) __LINE__ 行番号 __STDC__ 標準Cに従っている際に定義されている(ifdefで使う) __STDC_HOSTED__ 整数1 __STDC_IEC_559__ IEC60559浮動小数点仕様に従っている際に定義されている __STDC_IEC_559_COMPLEX__ IEC60559互換の複素数仕様に従っている際に定義されている __STDC_ISO_10646__ ?→http://seclan.dll.jp/c99d/c99d02.htm#dt19990412 __STDC_VERSION__ C言語のバージョン __TIME__ ソースのコンパイル時刻 __TIMESTA

    定義済みマクロ - redstrange Wiki*
  • ビルド時間の短縮 - kryozahiro’s diary

    Boostは便利だけど、ちょっと使っただけでビルド時間が一気に長くなってしまうので、何とかならないか調べてみた。 まず、最近のgccではプリコンパイル済みヘッダ(PCH)が使えるらしい。しかし、ヘッダをプリコンパイルしたときのオプションが番のコンパイル時と違う場合、プリコンパイル済みヘッダは利用されない可能性が高いとのこと(http://d.hatena.ne.jp/rero/20080609/p1)。リリース時のみ使うか、VCで言うところのstdafx.hのようにプロジェクトごとのプリコンパイル済みヘッダを用意する、ということになりそう。 次に、以前から名前は知っていたccacheを見つけた。(家、windows版) これはヘッダをプリプロセスした結果をキャッシュするツールで、使い方は単に $ ccache gcc foo.c とすれば二度目からコンパイルを高速化してくれる。 こっち

    ビルド時間の短縮 - kryozahiro’s diary
  • 1