タグ

cに関するshimookaのブックマーク (47)

  • 「この位置にprintfが無いとなぜか動かないんだ。」 - Qiita

    はじめに 先日ツイッターで見かけた呟き pic.twitter.com/33Yk02hu1U — TOMO (@tomozh) October 14, 2020 そういうこともあるのか的な反応もあるようなので具体例を挙げてみることにする。 例1 所謂FizzBuzz問題。 #include <stdio.h> void fizzbuzz(int n) { int next; int i = 1; do { printf(i % 15 ? i % 5 ? i % 3 ? "%d\n" : "Fizz\n" : "Buzz\n" : "FizzBuzz\n", i); if (i++ >= n) next = 0; } while (next); } int main(void) { printf((char[]){""}); // この位置にprintfが無いとなぜか動かない fizzbuz

    「この位置にprintfが無いとなぜか動かないんだ。」 - Qiita
  • 実践的低レベルプログラミング

    はじめに 学校で習わないが(習う学校もある)、現実に必要になるプログラミング技術に、低レイヤプログラミングなどと呼ばれるものがある 厳密な定義は聞いたことがないし、おそらく存在しないとは思うが、大体のみんなの共通認識として、 「高級プログラミング言語を使わないプログラムを書き、OSで抽象化されないデバイスの機能を使う」といったような認識があると思う。 筆者の経験から言わせてもらうならば、低レイヤプログラミングに関する知識は、プログラミングにおいてあらゆる場面で、常に、少しずつ役立てられる知識だと言えると思う。 普段はRubyPHPなどを書いてる人であったとしても、メモリが足りなくなった場合や、デバッガを使っている場合、性能が足りなくなった場合など、 厳しい環境におかれた時に低レイヤプログラミングに関する知識が必ず役に立つ場面が来ると信じている。 また、役に立つかどうかは置いておいても、「

    shimooka
    shimooka 2018/10/15
    やっぱり「低レイヤー」だったか。良い。
  • 副作用完了点について - Qiita

    記事の内容はC90の規格票(「プログラム言語C JISX3010-1993 (ISO/IEC 9899:1990)」)を根拠としています。 副作用完了点とは何か 家事ロボットに以下の作業を命令したとします。 庭に水を撒く。 料理を作る。 洗濯をする。 ロボットから作業完了の報告を受けた時点で結果を確認してみると、庭の芝生には水が撒かれ、料理も完成しており、洗濯も終わっています。 つぎに、以下の作業を命令したとします。 銀行に行ってお金を下ろす。 スーパーで材を買う。 料理を作る。 ロボットが外出してしばらく経った後、ロボットからエラーの報告を受けました。「銀行でお金をおろすことだけできた」そうです。いったい何があったのか聞いてみると、 「最初に料理を作ろうとしたが、材が無いので料理を作ることができなかった。つぎにスーパーに行ったが、お金が無いので材を買うことができなかった。最後に、

    副作用完了点について - Qiita
  • わずか500行のCソースコードで作られたCコンパイラ「CC500」 | ソフトアンテナ

    Cコンパイラといえばとてつもなく複雑なプログラムというイメージがあります。ところが、このCコンパイラを(サブセットとはいえ)わずか500行ほどのCのソースコードで実現した「CC500」名付けられたプログラムが公開されています。 ソースコードは可読性を維持するためにつけられた空行やコメントを含めると、実際は750行ほどになるそうですが、それでもこれだけコンパクトなソースコードで実行可能なELFバイナリ(Linux用のバイナリ)を生成できるのは興味深いのではないでしょうか。 以下実際にLinuxでコンパイルしてみました。 自己コンパイルできる このコンパイラはC言語のサブセットで、自分自身のソースコードをコンパイルできるところがおもしろいところです。まず「cc500_1」という実行ファイルを生成します。 gcc cc500.c -o cc500_1 生成された実行ファイル「cc500_1」を使

    わずか500行のCソースコードで作られたCコンパイラ「CC500」 | ソフトアンテナ
  • さあPHPという言語処理系のソースコードを読んでみよう

    仕事 ワイヤフレーム書いたり ビジュアルデザイン作ったり ユーザストーリー書いたり PHP, JavaScript, Objective-C(iOS, MacOSX), Java(Android), Scala, C# - だいたいなんでもやる

  • http://www.rodeo.jp.net/tech/phalcon-php-framework/

    shimooka
    shimooka 2013/07/26
    C言語で作られたPHPフレームワーク。フレームワークじゃないけどsimplate思い出した。そう言えば、その昔なかったっけ。。。?
  • どうも周知徹底が不足しているようなので再度のお願いとなりますが、C死ね。

    確かにCでしか書けない類のプログラムは存在する(例を挙げるならKernel)が、それはCの存在を赦す理由にはならない。確かにCに輪をかけてさらにダメな類のプログラミング言語は存在する(例を挙げるならC++)が、それはCの存在を赦す理由にはならない。確かにCでしか書けないダメプログラマは存在する(例を挙げてほしければここにおまえの名前を入れろ)が、それはCの存在を赦す理由にはならない。結論:C死ね。 そもそも計算機にできて算盤にできないことなど存在しない。存在しないんだぞ。なのに何故人はプログラムを書くのか。それはオートメーションのためなのであり、奴隷的使役から人類の尊厳を開放して、この地上に楽園を築くためである。まあそこまで大上段に振りかぶって普段から書いてる輩はいないにせよ、プログラミングとは楽をするため、豊かな人生を実現するため、誰かの幸福のために行うものだ。違うか?じゃあなぜプログラ

    どうも周知徹底が不足しているようなので再度のお願いとなりますが、C死ね。
    shimooka
    shimooka 2012/12/14
    『たとえシステムがユーザーの負担を減らしたとしても、そのぶんプログラマが背負ってるだけに過ぎない場合が多々見受けられる』まあCに限らず、ありがちな受託案件ってこうなのかも。
  • PostgreSQLのメモリ管理 | Everyday Deadlock

    この記事は PostgreSQL Advent Calendar 2012 の13日目の記事です。 昔からデータベースエンジン関係の研究をしているうちの研究室 では、「PostgreSQLを使う」というとPostgreSQLのコードをいじってTPCベンチマークを走らせることを指すので、未だにSQLとか書けなくて困ることが多いのですが、幸か不幸かPostgreSQLのソースコードはそこそこ読めるようになりました。 そんなわけで、PostgreSQLのソースコードの中でも、今回のAdvent Calendarのネタとしてメモリ管理の部分について紹介します。 これからPostgreSQLのコードを読んでみたいという人にとっては、コードのどの部分を読んでも必要となる知識なので、割と役に立つとおもいます。 【宣伝】大晦日にデータベースの同人誌コミケで売ります 題に入る前にいきなり宣伝で恐縮ですが

  • C言語のポインタはメモリを想像できれば理解できる | 100% Pure NEET

    最近、C言語のポインタは難しいって話をプライベートでして、そのときにした説明をまとめてみた。 コンピュータのメモリがどのようになっているか想像する これはHex Fiendというソフトを使ってあるファイルのHexダンプを見たものだけど、コンピュータのメモリも同じような構造になっているのでこれを使う。類似のソフトはHex Editorなどで検索すれば出てくるだろう。 コンピュータのメモリはこうしたずらずらと数値が記録されたマス目の連続のような構造をしている。Hex Editorなのでこれは16進数で表現されている。1バイトは16進数2桁で表現される。Hex Editorでは普通は1バイトごと、あるいは4バイトごとに区切って表示する。このエディタは一区画ごとに8桁の16進数があるので4バイトごと。 ポインタを使うのに重要なのはたぶん、こうしたメモリの内容を頭の中で思い浮かべることができることだ

  • C 言語によるオブジェクト記述法 COOL

    C 言語によるオブジェクト記述法 COOL ver.2 C-language's Object Oriented Language ver.2 [検索] 目次 0. はじめに 1. クラスの記述, 属性の記述 2. 操作の記述 3. クラス属性の記述、定数の記述 4. 初期化操作と後始末操作の記述 4-1.処理効率優先インターフェイス 4-2.再コンパイル不要インターフェイス 4-3.動的バインディング・インターフェイス 5. 状態取得操作と状態設定操作とイベントハンドラの記述 6. 集約の記述、継承の記述 6-1.集約の記述 6-2.継承の記述 6-3.多重継承の記述 6-4.重複継承の記述 6-5.動的継承の記述 7. 多態性(多相性)、インターフェイス継承の記述 7-1.多態性の記述 7-2.多態性を持った生成の記述 7-3.多重継承の多態性の記述 7-4.重複継承の多態性の記述 7

  • エンコードされた AndroidManifest.xml を読む : DSAS開発者の部屋

    アプリケーションマニフェストである AndroidManifest.xml をはじめ、Android アプリを構成する各種 XML ファイルは apk へのパッケージングの段階でパースされ独自のバイナリ形式にエンコードされます。 このファイルを扱う処理をコンパクトに実装したいと思ったのですが、現時点では形式に関する公式の資料が存在しないことがわかり aapt を参考に手元でフォーマットの分析を行いました。パーサ試作例とともにその内容を公開します。 1. データ例 (A) テストアプリ「MyApp」用に記述した生の AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.

    エンコードされた AndroidManifest.xml を読む : DSAS開発者の部屋
  • 訃報: C 言語の開発者、デニス・リッチー氏が死去 | スラド デベロッパー

    Google+ で Rob Pike 氏が語ったところによると、C 言語の開発者、K&R の R であるところの Dennis Ritchie 博士が亡くなられた。70 歳 (Rob Pike 氏による Google+ への投稿) 。 長らく闘病中だったとのことで、先週末に自宅で息を引き取ったそうだ。

  • PHPをハックしてオレオレ文法を追加する - PHPカンファレンス2011

    スマートフォンでのクロスプラットフォーム戦略 来のスマートフォンアプリ開発 iOSではObjective-Cで開発 AndroidではJavaで開発 2つのOS向けに同じアプリを書くのは多大なコスト。

  • Big Sky :: Re: サブドメインに任意の文字列が入るウェブアプリのローカル開発

    サブドメインに任意の文字列が入るウェブアプリのローカル開発 - 冬通りに消え行く制服ガールは?夢物語にリアルを求めない。 - subtech サブドメインに任意の文字列が入るようなサービスをローカルで開発しようとすると、いろんなホストを /etc/hosts に書かないといけなくてすごく不便なので、なんとかしようと思っていたところ、id:hakobe932 先生に「それアレでできますよ」との御言葉を頂き、簡単なスクリプトを書きました。 http://subtech.g.hatena.ne.jp/cho45/20110804/1312389877 僕ならこうやるかも libcho45.c #define _GNU_SOURCE #include <dlfcn.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #incl

    Big Sky :: Re: サブドメインに任意の文字列が入るウェブアプリのローカル開発
    shimooka
    shimooka 2011/08/05
    ブクマコメントも併せて読む
  • while(1){LOVE++;}を最適化 - duost

    最近ツイッターで "while(1){LOVE++}"と書き込まれてる指輪があって、 そのソースは最適化でLOVEが消えてただの無限ループになる云々という話があったので検証。 http://togetter.com/li/144840 用意したソースはこちら。 int main() { int LOVE = 0; while(1){LOVE++;} } それじゃアセンブラを見てみましょ。 まずは最適化抜き。 gcc -O0 -s hoge.c .file "hoge.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $0, -4(%ebp) ;LOVE=0 .L2: addl $1, -4(%ebp) ;LOVE++ jmp .L2 ;JUMP TO

    while(1){LOVE++;}を最適化 - duost
    shimooka
    shimooka 2011/06/16
    結論:愛は最適化すべきではない
  • ウノウラボ by Zynga Japan: Valgrindを使って楽々PHP拡張モジュール開発のデバッグ

    明けましておめでとうございます。@emorinsです。 みなさんモジュール開発ではどのようにデバッギングしていますか?モジュールになると普段使い慣れたデバッグツールが使えず、手動の動作確認だけで済まされている方もいらっしゃるのではないでしょうか。 今回はC/C++開発ではメジャーなメモリデバッガ『Valgrind』をPHP拡張モジュールの開発で活用することで、普段使い慣れたツールでのデバッグの例をご紹介します。 1.PHP拡張モジュールの作成 まず開発用にPHPをデバッグモードでビルド。 #cd ./php-5.x.x #./configure --enable-debug #make #make install PHP拡張モジュールを作成 #cd ./ext #./ext_skel --extname=zynga_func #cd zynga_func 16行目から18行目をコメントアウ

  • Android NDK でネイティブ CUI プログラムを書く! : DSAS開発者の部屋

    (2015年6月追記) 2014年10月に公開された Android 5.0 (Lollipop) 以降では PIE (Position Independent Executable) 以外のネイティブ実行形式がサポート外となったため注意が必要です。詳細はブログの次の記事を参照して下さい。 「Android で今後ネイティブ実行形式を扱う際に注意すべきこと」(2015年6月17日掲載) 今ならとても有利な条件で au の Android 端末を入手できることをネットで知り、先週の休みに地元の家電量販店へ足を運んでみました。 Android 1.6 搭載のこの「IS01」に今後 OS のバージョンアップサポートが適用されない旨の発表を聞いた時はお気の毒に・・と思っていましたが、極端に低いコストで実機を持てるのなら話は別です。とりあえずの実験用としていろいろ使えることでしょう。 そんなわけで

    Android NDK でネイティブ CUI プログラムを書く! : DSAS開発者の部屋
    shimooka
    shimooka 2010/12/03
    "小郡"近辺なのは分かった
  • 手軽に出来るApacheモジュール開発②

    > /usr/sbin/apxs -g -n hello_world (-g:テンプレート生成、-n:モジュール名指定) これでhello_worldディレクトリが作成されました。そのディレクトリへ移動します。 ② コードの修正・追記 ソースコード(mod_hello_world.c)を次のように修正・追記します。 /** * mod_hello_world.c -- Apache sample hello_world module */ #include "httpd.h"#include "http_config.h"#include "http_protocol.h"#include "ap_config.h" #define DEFAULT_AVAILABLE 0 /** * モジュールの設定に関する部分 *//* モジュールの設定を表す構造体を定義する */typedef str

    手軽に出来るApacheモジュール開発②
  • C++ Excel Library to read/write xls/xlsx files - LibXL

    Direct reading and writing Excel files LibXL is a library that can read and write Excel files. It doesn't require Microsoft Excel and .NET framework, combines an easy to use and powerful features. Library can be used to Generate a new spreadsheet from scratch Extract data from an existing spreadsheet Edit an existing spreadsheet LibXL can help your applications in exporting and extracting data to/

  • オレオレSQLの作り方〜PostgreSQL編〜 - よねのはてな

    オレオレ言語全盛期の炎暑の候、いかがお過ごしでしょうか。 オレオレSQLの作り方〜PostgreSQL編〜という事でPostgreSQLに、自作のSQL関数を組み込むやり方を紹介します。 簡単に言えば select oreore(); select oreore(column1, column2) from table1; 自分で定義したC言語のoreore関数をDBに組み込んで使おうという事です。 固定値を返す関数 早速、固定で999を返す関数を作ってみます。 ※バージョンはpostgresql8.1です。インストール等は省略します。 #include "postgres.h" #include "fmgr.h" PG_FUNCTION_INFO_V1(oreore); Datum oreore(PG_FUNCTION_ARGS) { // 固定で999を返します PG_RETURN_I

    オレオレSQLの作り方〜PostgreSQL編〜 - よねのはてな