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

はじめに 皆さんは競技プログラミングで「テンプレート」は使っていますか? rep や chmin 、 modpow など、よく使う処理を事前に用意したもののことです。 この記事では、C/C++で使える「テンプレート」1の記述方法について紹介します。 C/C++のテンプレートは邪魔! テンプレートはとても便利です。コンテスト時に書くコードが少なくなり、解答スピードが速くなります。 実装方法を忘れてコンテスト中に調べ直す、なんてこともなくなります。 しかし、便利さを追い求めて様々な関数やクラスの追加を重ねるうちに、テンプレートが膨大な行数になってしまいがちです。 また、C/C++ではどうしても使うより先に宣言が必要です。すると、 main 関数はテンプレートの下に書かなくてはならず、いちばん下の main 関数にたどり着くまでのスクロールでイライラしてしまいます。 さらに、参考にしようとあなた
回答 (3件中の1件目) なかなか理解しづらい話だと思いますが、当時のベル研究所において、Unixのグループは濃密な知のルツボだったのです。B言語が発明されるとすぐに、十数人の人々が使い始め、良かったところと悪かったところのフィードバックが集まりました。デニスは数日後にはインタプリタ言語だったB言語をコンパイラ化し、古いバージョンを分かりやすいところに置いていました。B言語のユーザーは、バグを見つけるとデニスにメールし、バグが直るまで古いコンパイラを使っていました。 B言語をC言語に改名した主な理由は2つあります。まずB言語(とBCPL)は、CPUのアドレスがバイト単位ではなくてワード...
C標準ライブラリ Muslのatoi関数実装 では、符号付き整数オーバーフロー回避のため負数範囲で10進数値を減算してゆき最後に符号反転を行っている。 int atoi(const char *s) { int n=0, neg=0; while (isspace(*s)) s++; switch (*s) { case '-': neg=1; case '+': s++; } /* Compute n as a negative number to avoid overflow on INT_MIN */ while (isdigit(*s)) n = 10 * n - (*s++ - '0'); return neg ? n : -n; } C言語の符号付き整数型(int)では “2の補数” 表現が用いられるため*1、最大値INT_MAXより最小値INT_MINの絶対値が 1 だけ大き
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)
ソフトウェア1 (2020)¶ 本サイトは、東京大学工学部電子情報工学科・電気電子工学科の進学内定者(2年生、A1ターム)を主たる対象としたソフトウェア1の講義ページです。C言語の基礎を勉強します。 電気系の学科のslackにて講義に関する通知を行うので、常時学科slackをチェックするようにしてください。 電気系の2年生は最初のオリエンテーションで全員slackに招待されるはずですが、もし招待されていなければ松井まで連絡してください。 3年生は既に全員招待済みのはずです。電気系以外の履修者、および4年生は招待されていないので、松井まで個別に連絡してください。 本サイトは2020年度版です。2021年度版はこちら。 ニュース¶ [2020.11.16] Q&Aにweek7を追加しました。 [2020.11.12] week7、およびバージョン管理を追加しました。 [2020.11.09]
==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
はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム この本には一冊の本に盛り込むにはやや欲張りな内容を詰め込みました。本書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 この本では、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを本書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう
# include <stdio.h> # include <stdlib.h> // 構造体の宣言 typedef struct { int num; char *str; } strct; int main(void) { // 実体を生成 strct *entity; // 動的メモリの確保。確保したメモリをstrct型ポインタにキャスト。 entity = (strct*)malloc(sizeof(strct)); // メンバの初期化 entity->num = 0; entity->str = (char*)malloc(sizeof(32)); // メモリに文字列を代入 sprintf(entity->str, "%s %s!", "Hello", "World"); printf("%s\n", entity->str); // メモリの解放 free(entity->
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
第二引数のargvですが、正しく理解していますか? 「charの配列へのポインタ」なのか、 それとも、 「charのポインタへの配列」なのか、 答えられますか? 残念な事に、僕は6年間ぐらいコレが曖昧なまま放置していました。 ですが、わかってみると本当はめちゃめちゃ簡単なんです。 単にC言語の解説の際に、なぜかそれが全然解説されていないだけなんです。(要出典) なので、解説を書こうと思いました。 覚えることは7個だけ 覚えなきゃいけないのは以下の7個の規則です。 規則1: 「*」は「pointer to ...」 「*」はポインタを表す記号です。知ってますね。 ここでは、「pointer to ...」を覚えてください。 規則2: 「[]」は「array of ...」 「array of ...」を覚えてください。 []の中には要素数を書けます。 規則3: 「()」は「function
整数に関係するバグについてのメモ。 環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.4 LTS Release: 14.04 Codename: trusty $ gcc --version gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 整数オーバーフロー(Integer Overflow) 整数オ
ungetc ってどう使う? stdio.h には、あまり使わない関数も多いが、特にこの ungetc(3) は、特別なテクニックと共に使われるものなので、知らないプログラマは絶対知らないが、使い方を知っているプログラマにとっては、非常に汎用的に使える関数(というかアイデア)なのである。筆者はインタプリタが得意なので、この ungetc(3) は必須アイテムの一つなのである。というわけで、ungetc(3) の使い方を解説しよう。 とはいえ、この ungetch.htm は結構気合いを入れて書いたにも関わらず、アクセスが少ない! 重要なテクニックなんだけど、一般認知が低いな! これがクヤシイので、ここにBNFのちゃんとした解説を入れることにする。前半もちゃんと読むのだぞ! 字句の先読み 単純な数式処理 自然数式処理 lex と yacc 字句の先読み ungetc(3) は文字列をトークン
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/ *-----*
C標準ライブラリscanf関数の書式指定%sにおいて、取得先の文字列バッファを動的確保する機能拡張。 // POSIX準拠システム char *s = NULL; scanf("%ms", &s); // sはmallocで確保される ... free(s); まとめ: 標準C(ISO C):該当機能は存在しない。メモリ領域を事前確保し、書式指定%sには領域サイズを指定すること。*1 POSIX準拠システム:動的メモリ確保を行うオプション文字mが存在する。 LSB準拠システム:動的メモリ確保を行うオプション文字aが存在するが、これはC99標準の16進浮動小数点%a指定と衝突する。*2 POSIX オプション文字mはThe Open Group Base Specifications Issue 6/IEEE Std 1003.1-2008で追加*3されている。POSIX規格(IEEE St
創刊号の1989年10月号から最終号となる2006年4月号まで、全199号が発行されたプログラミング技術情報誌『月刊C MAGAZINE』が電子書籍で復刻! 16年半の歴史がいまよみがえります。C Magazineセット販売について※ここで販売しているタイトルは月刊C MagazineのPDFデータが半年分(6巻)ずつセットになっているものです。 ※この電子書籍は紙の印刷物をスキャンしたデータを格納した「まるまるC MAGAZINE COMPLETE for DVD」(2006年発売)を元に制作されております。発行年度によっては汚れ、カスレ、カスミ、ズレ、黄ばみなどがあります。必ず立ち読みファイルか、http://www.sbcr.jp/topics/11895/で公開中のサンプルPDFをご覧いただいてからご購入ください。 ※復刻版のため誌面に掲載されている各種情報、プレゼント企画などは出
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く