タグ

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

  • 関連タグはありません

タグの絞り込みを解除

ProgrammingとC++とCに関するagwのブックマーク (47)

  • My toy renderer, part 1: Keep it simple

    Part 1 of this series about my toy renderer covers the most fundamental design decisions. Over the years, I have written many renderers and for a long time their complexity kept growing. This time, I took the opposite route. I wanted to maximize the fraction of code that implements crucial functionality rather than wasting my time on bloaty infrastructure. The code that I wrote (excluding shaders)

  • valgrindでC/C++のメモリリークを発見する - Qiita

    ==23525== Invalid free() / delete / delete[] / realloc() ==23525== at 0x1000089DF: free (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) ==23525== by 0x100000F4F: main (sample.c:8) ==23525== Address 0x10081f510 is 0 bytes inside a block of size 4 free'd ==23525== at 0x1000089DF: free (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwi

    valgrindでC/C++のメモリリークを発見する - Qiita
  • 3次元配列のポインタ - プログラマ専用SNS ミクプラ

    3次元配列に対するポインタはどうやって作ればいいのでしょうか? 例えば char A[5][7][9] ={0}; に対するポインタはどう表記して、どのように値を格納すればいいのでしょうか? 分かる方いたら教えてください すみません、今規約を読んできました。 どうやら最悪な聞き方をしていたようで… [1] 質問文 [1.1] 自分が今行いたい事は何か 三次元配列に対するポインタを造りたい。 [1.2] どのように取り組んだか(プログラムコードがある場合記載) code #include <stdio.h> int main(void){ int *pass[406]; int D[201][201][4]; pass = D; return 0; } /code [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載) a.c: In function `m

  • C言語の型宣言の解説 - Qiita

    第二引数のargvですが、正しく理解していますか? 「charの配列へのポインタ」なのか、 それとも、 「charのポインタへの配列」なのか、 答えられますか? 残念な事に、僕は6年間ぐらいコレが曖昧なまま放置していました。 ですが、わかってみると当はめちゃめちゃ簡単なんです。 単にC言語の解説の際に、なぜかそれが全然解説されていないだけなんです。(要出典) なので、解説を書こうと思いました。 覚えることは7個だけ 覚えなきゃいけないのは以下の7個の規則です。 規則1: 「*」は「pointer to ...」 「*」はポインタを表す記号です。知ってますね。 ここでは、「pointer to ...」を覚えてください。 規則2: 「[]」は「array of ...」 「array of ...」を覚えてください。 []の中には要素数を書けます。 規則3: 「()」は「function

    C言語の型宣言の解説 - Qiita
  • CppCon 2015: Greg Law " Give me 15 minutes & I'll change your view of GDB"

    http://www.Cppcon.org — Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/cppcon/cppcon2015 — Lightning Talk — Videos Filmed & Edited by Bash Films: http://www.BashFilms.com *-----* Register Now For CppCon 2022: https://cppcon.org/registration/ *-----*

    CppCon 2015: Greg Law " Give me 15 minutes & I'll change your view of GDB"
  • トライグラフ - Wikipedia

    C言語におけるトライグラフ (日: 3文字表記[1]・英: trigraph) とは、ISO 646 に共通して含まれる文字だけでソースコードを書くための表記法である。 C言語のソースコードはASCIIの文字セットを用いて表記されるが、ISO 646で自由に文字を割り当てられる領域の文字まで使う文法となっている。特に、括弧類が別の文字に置き換わっているとソースコードの表記がしづらくなるので、ISO 646で自由割り当てでない文字を3つ組み合わせることで、それらの文字を表すこととした。これが3文字表記である[2]。

  • なぜ gcc はファイルの最後に改行がないと警告を出すのか? - Schi Heil と叫ぶために

    gcc が出す以下の警告。消すのは簡単で EOF に改行を一つ入れれば良い。でもこれ何が悪いのか分からなかった。 warning: no newline at end of file コンパイラが出す警告だから絶対に何か意味があるはず。調べてみると意外にもテキストファイルの定義にたどり着いた。 ということで POSIX 的に行は改行で終了していて、テキストファイルは行の集合だからファイル末尾には必ず改行が来ると。 Text File / Line - odz buffer Definitions - 3.392 Text File Definitions - 3.205 Line つまり POSIX はテキストファイルにもちゃんと定義を定めていて、最後に改行が無いファイルはその定義に違反するから警告を出す。 There is also some confusion as to whethe

    なぜ gcc はファイルの最後に改行がないと警告を出すのか? - Schi Heil と叫ぶために
  • Super Technique 講座~マクロの技

    質的にC言語はトリッキーな言語ではない。だから、トリッキーな技は特定機能に集中する傾向があり、そのような機能とは「マクロ」と「ポインタ」である。 引数展開マクロの小技 DRY原理とプロトタイプ宣言 グローバル変数管理 関数ポインタ配列のプロトタイプ宣言と定義 引数展開マクロの小技 一般論としては、マクロは define 文によって即値定数を記号定数で定義しなおす、というのが真っ当な技であるが、これは今更触れるほどの内容はない。それでも次のようなテクニックはある。 #define swap(type,a,b) {type tmp=a;a=b;b=tmp;} int x = 10; int y = 20; swap( int, x, y ); これは引数展開マクロを使って、いわゆるSWAPを実現する簡単なマクロである。よく類書にこれは「次のように使うと問題がある」とされる。 if( z )

  • 文字配列char str[x]の初期化

    C言語では (P2)のような間違い?をしてもコンパイルエラーにならないことに注意しよう. (P2)は10文字分の配列しか用意していないところに10文字の初期値をしていしているので,末尾のNUL文字を格納するスペースがたりていない. このような場合,配列str2の中身は{ 0x31, 0x32, ..., 0x39, 0x30 } になって終端がNUL文字にならなくなる. なので,printf("%s\n", str2);とすると, 1234567890^E)x※wk△bl%@@-$^x&…みたいなメチャクチャ ハチャメチャな文字列が表示されることになる. この動作は char str[10] = "123456789";のような書き方が単なるシンタックス シュガーであり 実はchar str[10] = { 0x31, 0x32, ..., 0x39, 0x00 };と展開されるのだという

  • C++ Advent Calendar 2012 「18日 : Cer に知って欲しい C++」 - krustf の雑記

    この記事は, C++ Advent Calendar 2012 (C++ Advent Calendar 2012 - PARTAKE) の18日目です. 温いネタをやりたいので C 言語を使っている人 (Cer) に C++ の知って欲しい/今すぐ使える機能を Tips 的に書いていこうと思います. 対象は特に設けなくていい気がしますが, 例えば数値計算クラスタとか. 普段 malloc とか for とかぶんぶんしてるような気がするので言い例かも. よく分からないところがあったらこの記事か Twitter の @krustf にでも質問してください. 後, 詳しい説明はしないほうが良いと思います. "C++ ってこんな風にかけるのか!" ぐらいの感想を持って頂いて, 使ってみようとする人が増えてくれればと思います. その点では途中よく分からない語が出てくるかもしれませんが「へー」ぐらい

    C++ Advent Calendar 2012 「18日 : Cer に知って欲しい C++」 - krustf の雑記
  • 3番地コード - Wikipedia

    3アドレスコード(英: three-address code)とは、コンピュータ・プログラミング言語処理系などにおける中間表現などにおける形式の1パターンである。処理系においては、コンパイラ最適化などの処理を掛けるのに適している。2つの入力と1つの出力のアドレス(メモリまたはレジスタ)を指定する形式であるため、3アドレスコードと呼ばれる。命令セットアーキテクチャにおける「3オペランド」形式の類推とも言える。 この形式における各命令は、形式的に4ツ組で表現すると (オペコード, ソース1, ソース2, デスティネーション) である。より直感的にプログラミング言語における代入と2項演算子による数式っぽく書くと、 あるいは、 といったようになる(ただし は、なんらかの演算の2項演算子とする)。「左辺」「右辺」という用語の都合から、ここでは以後、後者の記法を使う。 ここで、a と b は、比較的に

  • 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
  • 競技プログラミングで陥りやすい言語仕様の罠 - 情報オリンピック 問題と解説

    筆者: qnighy 競技プログラミングでは手続き型言語として必要な最低限度の言語仕様さえ覚えておけば問題ないとされることが多い。 その一方で、ある種の特殊な言語仕様を知らないことによって特殊なバグに悩まされることも少なくない。 そこでここでは、そのような競技者の嵌りやすい罠を見つけ次第挙げていきたい。 CとC++の配列初期化の罠

  • Camp Vermont

    Add to Cart Produk ini tidak dapat dibeli karena bermasalah. Silahkan hubungi kami. Dalam dunia perjudian online, slot gacor menjadi salah satu permainan paling populer yang digemari oleh berbagai kalangan. Dengan mekanisme sederhana dan peluang menang besar, slot kerap menjadi pilihan utama bagi pemain baru maupun berpengalaman. Salah satu platform yang sedang naik daun dan menarik perhatian para

    agw
    agw 2012/04/04
    C++でfreopen。
  • 2004-10-02

    最近C++を使う時間が長いのでががーっと C++批判文章を書き上げてみる…。 (注:以下の文章において、C言語とはC/C++をさすものとお考えください) gotoは今から30年以上も前のダイクストラ先生による撲滅運動の 甲斐もあってかどうなのか、今日では良くないものの代名詞のように なっている。良くないということの主な理由はプログラムの流れが 見えにくくなる、等のようなのだが、実際のところどの程度のものかは よく分からない。C言語において、例えばループ構文を使わずにすべてを gotoでまかなおうとするとこれはほとんど自明に、確かに大変である。 例えばfor文なら、 for (A;B;C) body というものは、これを形式的に A _continue_for: if (B) goto _break_for; C goto _continue_for; _break_for:; このように変

    2004-10-02
  • なぜいまだにシステムプログラミングはCなのか

    Programming Language Challenges in Systems Codes システムコードにおけるプログラミング言語の挑戦、あるいは、なぜいまだにシステムプログラミングはCなのか。 著者がJonathan Shapiroであることが興味深い。Jonathan ShapiroはD&Eに頻出する名前である。Bjarne Stroustrupの記述からして、初期のC++の設計に多大な影響を与えた人物である。それに、最初にC++を使って格的で大規模なプロジェクトを始めたのも、Jonathan Shapiroだ。しかし、今日、Jonathan Shapiroの名前はC++界では、あまり有名ではない。私はMLとかHaskellなどの言語には疎いので、この方面の話は知らなかった。 なぜシステム・プログラミングは、いまだに1970年代に開発された大昔の高級アセンブリ言語で書かれてい

  • warning: multi-line comment - 揮発性のメモ2

    シフトJISのソースをコンパイルするとき、コメントの行末が「能」だったりすると出る。 gccのワーニング usart.h:18:1: warning: multi-line comment 問題のソース 17: // ========================== 18: // 変更可能 19: // ========================== 原因 SJISの「能」は 0x94,0x5C であるため。 0x5C は ASCIIでは \ になるので、次の行とくっつく 対策 gccのオプションに --input-charset=cp932 をつける http://www.google.co.jp/search?q=cache:http://twistbendcoupling.net/2006/04/blog-post_16.html http://ja.wikipedia.o

    warning: multi-line comment - 揮発性のメモ2
  • Why are elementwise additions much faster in separate loops than in a combined loop?

    Suppose a1, b1, c1, and d1 point to heap memory, and my numerical code has the following core loop. const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } This loop is executed 10,000 times via another outer for loop. To speed it up, I changed the code to: for (int j = 0; j < n; j++) { a1[j] += b1[j]; } for (int j = 0; j < n; j++) { c1[j] += d1[j]; } Compiled on Micr

    Why are elementwise additions much faster in separate loops than in a combined loop?
  • gcc でアセンブリコードを出力する - cocoatomo衝動日記〈移行後版〉

    gcc -S でアセンブリコードが出力されることを初めて知った(滝汗) やばいくらい面白いぞ!! (gcc のバージョンは gcc version 4.0.1 (Apple Computer, Inc. build 5370)) 簡単なプログラムで C のソースとアセンブリコードを比較してみる。 int main() { int x = 0; return 0; } gcc -S するとこうなる。 .text .globl _main _main: pushl %ebp movl %esp, %ebp subl $24, %esp movl $0, -12(%ebp) movl $0, %eax leave ret .subsections_via_symbols ちなみに gcc -S -O2 してもアセンブリソースは変わらなかった。 引越し準備とかあるのでちょっと中断 アセンブリコード

    gcc でアセンブリコードを出力する - cocoatomo衝動日記〈移行後版〉
  • signed intでの配列アクセスはマジヤバイ(こともある) - memologue

    次のC/C++なコードには問題があります。 #define A_SIZE 6 static int a[A_SIZE]; void vuln(int n, int val) { assert(n < A_SIZE); a[n] = val; }配列アクセスの添字となる変数aの方が signed int なのが問題です。nとして負数を渡すと面白い(というか恐ろしい?)動作をします。 ええと・・(int)(0x80000000U + n) を vulnの第一引数として渡すと*1、vuln内の配列xのx[n]に書き込むことができてしまうのです。もちろん、配列の境界チェックは行われません。だから、 int main(void) { // test1: a[4] = 123; と同じ。 // これはまぁ配列の範囲内だからいいけど・・ vuln(0x80000004U, 123); // test2:

    signed intでの配列アクセスはマジヤバイ(こともある) - memologue
    agw
    agw 2011/10/12
    配列の引数にはsize_tを用いるという話。