タグ

C++に関するsuzusimeのブックマーク (63)

  • LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ

    コンパイラを作ってみたいと思っていても、アセンブリ言語はよくわからない。 パーサーみたいなコードは書いたことがあるけれど、コード生成の処理はさっぱりだ。 実行ファイルをバイナリエディターで見るとかなにそれ怖い。 そんな私なのですが、LLVMに興味を持ち始めています。 SwiftRust、あるいはEmscriptenなど、近年注目されている言語やコンパイラ技術の中枢にはLLVMがあります。 アセンブリはよく分からなくてもLLVMを使いこなせるようになれば、マルチプラットフォームで実行ファイルを生成できる言語処理系を作るのではないか。 コンパイラ作ってみたいな、LLVMを使ってみようかなと思っている今日このごろです。 ところが、いざLLVMを勉強しようと思ってもどこから始めればいいかよく分かりませんでした。 マニュアルは巨大で読む気が起きないし、リファレンスを見てもさっぱりです。 雰囲気はわ

    LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ
  • 2014-10-pre-Urbanaのレビュー: N4220-N4229

    [PDF注意] N4220: An update to the preprocessor specification (rev. 2) プリプロセッサーの規格には、未定義な挙動とされている部分があるが、多くの主要な実装で似通った実装になっているところもあるので、その部分を規格で追認する。また、生文字列リテラルやユーザー定義リテラルなど、C++の新しい文法にプリプロセッサー規格が追いついていないので、対応させる。矛盾した点や曖昧点も改善する。 プリプロセッサーの定義に未定義な挙動が多いのは、実装に自由度をもたせたり、独自拡張を許可したりするためだったのだが、結局問題のある未定義の挙動は違法であると定義したほうがよいし、当時は独自拡張のために未定義にしていたところも、数十年たてば、主要な実装はほぼ似たような実装に落ち着いたりした。 [PDF注意] N4221: Generalized life

  • コンパイル中にコンパイルする「コンパイル時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の日記
  • c++数値計算から風と翼の計算へ

    c++から風と翼への行程 が計算と時代の位相を道標として進行。 Home Page の根拠地が c3-net、OCN Page On を 経て、Synapse となりました。 これで、三遷となります。三遷目の新しい大地で、 高の木、鎮守の木になりましょう。 そして、この木の前に広場が出来るように、 研鑽を積んでいきます。 この Homepage "風と翼"は時間を要します。 また、どこにいても参考に出来るようにとの 意図を持っています。都合により、変更します。 2012年にHomepageの体裁を一新しました。 2013年9月にOCNに移動しました。 2015年2月16日に Synapse に移動しました。 しばらくは、前のままですが、順次、追加していきます。 このH.P.には、 Euler変換・二項係数 62次まで、(現在 57次まで) Legendre多項式が34次、Chebyshev

  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

  • C++ で正規表現を使用する - C++ プログラミング

    C++ でも C++11 規格で正規表現が標準サポートされました。 正規表現といえば文字列を効果的に判定・抽出する有名な仕組みなので、Xcode や Visual Studio でもいち早く採用されているので、多くの場面で安心して利用できます。 ただし、正規表現のパターンを書くのに相性の良い raw 文字列は Visual Studio 2012 ではサポートされていないところは残念です。 raw 文字列については raw 文字列を使ってエスケープ文字を省略する に整理してあります。

  • C++標準のregex_search(正規表現)の動作と使用方法 - 結果だけでなく過程も見てください

    Visual Studio 2010あたり(C++11の機能)からC++標準で正規表現が使えるようになってます。 (以前はboostを使う必要がありました) regex_searchを使って、文字列全体から複数回マッチさせるにはどうしたらいいのか? ネットを巡回していて、なぜか以下のことをガツンと言ってくれている人が いなかったので備忘録として残しておきます。 まず、 regex_searchは最初に見つかった要素しか検出できない ということです。 以下に例を挙げます。ターゲットとなる文字列はstrTargetです。 string strTarget = "aaa subghi123 subu56 cccsubhi88 subddd99"; regex pattern( "sub" ); smatch match_results; if ( regex_search(strTarget,

    C++標準のregex_search(正規表現)の動作と使用方法 - 結果だけでなく過程も見てください
  • getlineはsplitに使える - Faith and Brave - C++で遊ぼう

    <string>ヘッダにあるstd::getline()関数は、行単位の読み取りだけでなく、区切り文字を指定するバージョンもあるので、splitの実装に使えたりする。 #include <iostream> #include <string> #include <sstream> #include <vector> std::vector<std::string> split(const std::string& input, char delimiter) { std::istringstream stream(input); std::string field; std::vector<std::string> result; while (std::getline(stream, field, delimiter)) { result.push_back(field); } retu

    getlineはsplitに使える - Faith and Brave - C++で遊ぼう
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

  • スマホ向けにDxLibのコードがそのまま動く! Cocos2dxで動かせるDxLib、「CCDxLib72」を公開します! - (/^^)/⌒●~*$ a(){ a|a& };a

    2017/10/25追記 DXライブラリ置き場 Androidアプリ開発の注意点など 公式でAndroid版が出たようなので、そちらを使用すべきです。 僕が作った以下で紹介するライブラリはもうメンテナンスされておらず、 今後もするかどうかも未定である点からも公式のものを使うべきです。 しかしながら、cocos2dxでラップした以下の版を使いたい方も いるやもしれませんのでこの記事はこのまま残しておきます。 リポジトリ github.com これは何? Cocos2dxの機能でDxLibの関数群(現在72個)をラップしたものです。 何が出来るの? DxLibは通常Windowsでしかビルド出来ません。 しかしこれを使えば、同じC++で書かれているcocos2dxを利用して、 DxLibのコードを殆どそのままでスマホ向け等にゲームをビルド出来ます! 使用許諾などはいらないので、好きに使ってくだ

    スマホ向けにDxLibのコードがそのまま動く! Cocos2dxで動かせるDxLib、「CCDxLib72」を公開します! - (/^^)/⌒●~*$ a(){ a|a& };a
  • C++初心者がC++を使って競技プログラミングするための備忘録のようなもの

    kyoupro_on_cpp.md C++初心者がC++を使って競技プログラミングするための備忘録のようなもの この記事は、C++ (fork) Advent Calendar 2013の12日目の記事です。 はじめに 記事を書く人が居ないみたいなので、C++初心者ですが箸休め的な記事を書こうと思い立ち、いざ書き上げてみたら思いの外長くなりました。 この記事は、C++初心者な著者が、C++を用いて競技プログラミングをするために、調べたことや試した事などのまとめです。 記事中に誤り、問題点やご指摘、ご質問等ありましたら、@rigibunまでご連絡下さい(特にpush_bach) githubmarkdownを使いたかったことと、変更履歴が見られることからgistで書きました。 免責事項 著者はこの記事を利用することによって生じたいかなる損害等に対して責任を負いません。 この記事は競技プログ

    C++初心者がC++を使って競技プログラミングするための備忘録のようなもの
  • cpprefjp - C++日本語リファレンス

    サイトcpprefjpは、プログラミング言語C++のリファレンスを提供するWebサイトです。 最新C++バージョンのリファレンスを提供していきます。 運営方針 リファレンスサイトは、C++言語の最新のリファレンスを常に提供し続けることを目標にしています。 各クラス、関数にはそれぞれ1つ以上のサンプルコードを付けていく方針です。 サイトでは、他サイトおよび規格書の直接的な翻訳ではなく、編集者の調査と考えに基づいた解説を提供していきます。 HTMLデータのダウンロード cpprefjp.github.io-master.zip ローカルで閲覧できるHTMLを用意しています。 スポンサーシップ cpprefjp - Open Collective このプロジェクトは、持続的な活動のため、ユーザーの方々からのご支援をお待ちしております。上記Open Collectiveのプロジェクトでスポン

  • オブジェクト指向を活用したシューティングゲーム - C/C++言語とDXライブラリでゲーム作成入門 - ポンクソフト

    目次 C/C++言語とDXライブラリでゲーム作成入門 シューティングゲームの作成(チュートリアル) ドットイートゲームの作成(チュートリアル) 15パズルの作成 神経衰弱の作成 オセロの作成 オブジェクト指向を活用したシューティングゲーム 今回の目的 オブジェクト指向を活用したゲームの作り方を知る ゲームのキャラクター管理を通してSTLのlistの使い方を知る ソースファイル 今回の講座のソースを全て含んだプロジェクトファイル(Visual C++ 2010)を以下に置いておきます。 shooting2.zip ゲームの説明 カーソルキーで自機を動かしてスペースキーで弾を発射します。弾が敵に当たると得点が入ります。 キャラクター画像の準備 以下の4つの画像が必要です。大きさは適当で構いません。 自機画像(player.png) 敵画像(enemy.png) 弾画像(shot.png) 背景

  • unique_ptr で今風な C++ コードを書こう!! - @nojima's blog

    はじめに お久しぶりです。KMC OB の id:nojima です。 この記事は KMC Advent Calendar 2014 の10日目の記事です。 昨日は id:murata さんの「受験生応援!Javascriptでひねくれ数列」 でした。 今日は C++ の unique_ptr の話です。 (最初は rvalue について書こうと思っていたのですが、書いてみると unique_ptr だらけになったのでタイトルを変えました。なので、KMC Advent Calendar 2014 に書いてあるタイトルとはい違っています。すみません) 個人的には C++03 ではなく C++11 を使う最大の理由は unique_ptr の存在だと思っています。 例外発生時にももれなく delete してくれる。 生ポインタとパフォーマンスが同じ。(最適化されている場合) 所有権を型として

    unique_ptr で今風な C++ コードを書こう!! - @nojima's blog
  • ロベールのC++教室

  • boost::serializationの使い方

    boost::serializationを使う はじめに コンパイル 簡単な使い方 クラスのバージョン付け 読み込みと書き込みで別の動作を行う 「非侵入型」のシリアル化関数 基底クラスをシリアル化する 配列をシリアライズする constメンバはどうするか ポインタからのシリアライズ:その1 ポインタからのシリアライズ:その2 基底クラスへのポインタから復元する 実装レベル オブジェクトの追跡 抽象クラスでのエラー NVP ロケールの設定 はじめに boost C++ Libraries(以下単にboost)という非常に便利なライブラリがあります。 次期C++標準にこのライブラリのうちのいくつかが採用されるらしいという話もあり、 C++開発者にとっては無視して通れないライブラリです。 そんなboostの中に、serializationというライブラリがあります。 一言で言ってしまえば、「クラ

  • C++の名前空間と前方宣言について - Gobble up pudding

    最初にざっくり説明すると、C++の名前空間はC#にある名前空間と同じ概念です。Javaでいうとpackageに近い概念です。 前方宣言(forward declaration)はC++特有のものだとおもわれます。 前方宣言について あるクラスで包含(コンポジション: Composition)をしたときに、つまりとある別のクラスを利用したいときに、そのクラスのメンバーとして持つときに使うものです。言葉で説明するとちょっとわかりにくいですが、こんな感じです。よく皆さんやってるかと思います。 あんまりいい例が思い浮かばなかったんで2DのRPGの地図上のキャラクターのクラスを例とします。 Character.h #pragma once #include "Image.h" class Character { public: int getHp() const; void setHp(int hp

    C++の名前空間と前方宣言について - Gobble up pudding
  • 第9回 機能拡張でよく使われる共用体(union)

    構造体によく似たC言語の機能に「共用体」(union)があります。これは,IPv4をIPv6に拡張するときなど,カーネルの機能を拡張する際によく使われます。共用体の使い方とカーネルでの利用例を実際に見ていきましょう。 カーネルは,機能がよく拡張されます。例えば,ネットワーク・プロトコルの「IPv4」と「IPv6」の関係です。現在の主流はIPv4ですが, LinuxカーネルはIPv6に対応しています。ソース・コードを見ると分かるように,IPv6のコードを一から書いているのではなく,IPv4を処理する部分でIPv6と共用できるところを機能拡張しています。ここで使うのが,「共用体」(union)です。 共用体は,カーネル内部のあらゆる部分に利用されています。カーネルの読者にはとても大事なものですが,C言語の教科書の多くには詳細な解説がありません。そこでまず最初に,共用体とは何かを説明しましょう。

    第9回 機能拡張でよく使われる共用体(union)
    suzusime
    suzusime 2015/08/10
  • 競技プログラミングの入力メモ - 2冊の本を3等分

    C++での入力受付について AOJの10000代問題は、解き方は乗ってても基の入出力があまりないので補足。 自分も始めたばっかりなので、変なところがあればtwitterでつっこみください。 5つのテンプレがあります。 入力の終わりまで取るパターン 入力の終わりには0が入っているパターン カンマ区切りで座標とか入力するパターン 文字列or文字入力するパターン 半角スペースを含めて1行取るパターン 入力の終わりまで取るパターン ex.0001 int n; while(cin>>n){ //処理 } これで自動的に入力が終わるとwhileを抜けてくれます。 入力の終わりは0が入ってるパターン 問題文は x が 0 のとき入力の終わりを示し、このデータセットに対する出力を行ってはいけません。 こんな感じ。 int n; while(cin>>n,n){ //処理 } カンマ演算子によって、最後

    競技プログラミングの入力メモ - 2冊の本を3等分
  • カリビアンコム期間限定スペシャルー無料お試し開始!

    カリビアンコム期間限定スペシャルー無料お試し開始!