タグ

c言語に関するedo_m18のブックマーク (20)

  • C言語の配列とポインタの違いのお話など - TamaCona Engineering

    今回はちょっと技術的な話を。 私も顔を出している西脇.rb/東灘.rb のメンバーの方からC言語の質問を受けました。 Rubyの勉強会なのにC言語の話題も出てくる、というところがこのコミュニティのよいところです。懐の深さやメンバーの方の強い向上心を感じますね。 その方、Rubyはバリバリですが、C言語は最近使い始めたそうで、 #include <stdio.h> main() { char str[] = "hogehoge"; …(1) char *str = "hogehoge"; …(2) *str = 'f'; printf("%s\n", str); } こういうコードを書いたとき、文字列の設定先を配列にするかポインタにするかで動きが変わるのはなぜか?不思議だったそうです。 char str[] = "hogehoge"; …(1) のときは、先頭1文字がfに置き換えられて、狙い

    C言語の配列とポインタの違いのお話など - TamaCona Engineering
  • GAS_インラインアセンブラ CapmNetwork

    GAS_インラインアセンブラ GAS(GNU アセンブラ)のインラインアセンブラ インラインアセンブラとは、アセンブリ言語で記述されたコードをC言語のような高級言語のソースコードに埋め込む機能のことです。 gccを利用した場合、C言語とGASは相性よくインライン記述することが可能です。 インラインアセンブラの構文 インラインアセンブラは、以下の基形でC言語ファイルにアセンブラコードを関数のように埋め込みます。 __asm__("asm code"); なお、「__asm__」ではなく「asm」と記述することも出来ますが、asmが予約語や関数名と衝突するしている場合には使用できない(C99ではasmキーワードが予約されています)ため、通常は「__asm__」を用います。 インライン構文は複数行に渡って書くことができます。 複数の命令を書く場合は、一行毎にダブルクオーテーションで括り、命令の

  • iOS アプリのバイナリを少しのぞいてみる

    Mac / iOS 開発担当の松です。 皆さんご存知のように iOS アプリを作るのに欠かせない Objective-C は、メソッドの解決が動的なこともあり、C言語のファミリーでありながら強力なリフレクション機能を備えています。そのリフレクションの必要性等から、実行ファイルには様々な情報が埋め込まれていて、何気なくバイナリエディタで開いただけで、テンションが上がるバイナリに仕上がっています。のぞかずにはいられませんね。という訳で今日はこのバイナリを少しのぞいてみたいと思います。 まずはバイナリの概要を抑えておきましょう。iOS 上の実行ファイルは Mach-O という形式で(まーく・おーと読むらしい)、これは WindowsLinux でいうところの EXE や ELF にあたります。この Mach-O のフォーマットについては アップルからドキュメントが提供されていますね。 細

    iOS アプリのバイナリを少しのぞいてみる
    edo_m18
    edo_m18 2015/12/11
    バイナリと仲良くなりたい。
  • Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! - Qiita

    話の発端は、StackOverflowの、この質問にあった。 StackOverflow語版 - c言語での乱数生成 質問に対する回答は、きわめて単純で、rand()関数を、取得したい乱数の個数分、呼んでやりましょうというもの。 いちおう、XcodeのCommand Line Toolで、サンプルコードを作って、それを実行してみて、ちゃんと意図したとおりの結果になることを確認する。が、ここで奇妙なことに気づく。 何度実行しても、初項が4になる。 試しに、こんなC言語のコードを書いて、Xcodeで実行してみる。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, const char * argv[]) { unsigned int i; unsigned int seed = (uns

    Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! - Qiita
  • 宣言的プログラミングの「宣言的」って? - sh-2の日記

    疑問 関数型言語を取り扱う書籍や記事を読んでいると、しばしば「宣言的」なる単語が飛び出してくる。どうやら、関数型言語で大事にされる概念らしい。 ところが意味を調べるとよく分からない。例えばWikipedia曰く、宣言的には2つの意味があるらしいのだが…… 純粋関数型言語/論理プログラミング言語/制約プログラミング言語で書かれたプログラムを「宣言型」と称する。この立場では、「宣言型プログラミング」とはそのようなプログラミング言語のグループ全体の総称であり、命令型言語と対立する概念である。 宣言型プログラミング - Wikipedia ある出力を得るにあたってそれを作成する方法ではなく、出力の性質を記述することを「宣言型」と称する。例えば、HTMLは、ページがどう見えるかを記述するものであるため、宣言的である。HTML はタイトルやフォントやテキストや画像を指定するが、具体的にコンピュータの画

    宣言的プログラミングの「宣言的」って? - sh-2の日記
  • extern "C" - debian36の日記

    前回は、C++ソースで定義された関数を Cソース内でコールする場合に起こる問題について書きました。 そのキーワードが、「マングリング」でした。 前回:http://d.hatena.ne.jp/debian36/20080226 では、その問題を回避する方法、すなわちマングリングを避ける方法について、今日は記します。 ずばり、その答えが、extern "C"  です。 この修飾子を見たことがあるかたも多いのではないでしょうか。 自分も、人のコードを見ていていると、たまに extern "C"{ .... .... } なんてコードが登場して、「ん〜、これは、C言語として解釈しろ」ってことなのかなぁってなんとなく思っていた程度でした。 確かに、extern "C" は、C言語として解釈して下さいよって、コンパイラ(g++)にお願いするものなのですが、なんのために、そのようなお願いをするのかと

    extern "C" - debian36の日記
  • 少し詳しい型変換の説明

    型変換については、第4章で簡単に説明しましたが、複雑な規則があり、迷うことの多い部分です。ですから、ここで少し詳しく算術型の型変換について説明してみようと思います。 なお、説明中で用いたコードの実行結果は「Borland C++ Compiler 5.5」(int:4バイト short:2バイト char:1バイト)で確認をしています。 1.汎整数拡張 文字型や整数型などの汎整数型の場合、型が、int より小さな場合(char, signed char, unsigned char, short, unsigned short)は、演算の最初に int か、表現できなければunsigned int に変換されます。このとき、符号を含めてその値を変えることはありません。 (例)short a = 30000, b = 30000; printf("sizeof(a) = %d\n", siz

  • インラインアセンブラで学ぶアセンブリ言語 第3回

    はじめに これまで、『インラインアセンブラで学ぶアセンブリ言語』の第1回と第2回を通じて、Microsoft Visual C++のインラインアセンブラを用い、アセンブリ言語の基について説明してきました。 第3回となる稿では、インラインアセンブラを用いた流れ制御を解説します。アセンブリ言語は高水準言語における文の概念がなく、すべての命令が単純なオペコードと引数(オペランド)だけで構成されています。この純粋な構造のために、流れ制御を行う場合も、if文やfor文のように記述することはできません。基的にプログラムの流れ制御はすべてC言語で言うところのgoto文だけで記述し、比較命令や条件ジャンプも個別の命令で行います。 来のマクロ機能を持たない生のアセンブリ言語ならば、ジャンプ先のプログラムの位置すらも、すべてメモリアドレスで指定しなければなりません。実際に、機械語にアセンブルされた後は

    インラインアセンブラで学ぶアセンブリ言語 第3回
  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

    edo_m18
    edo_m18 2015/04/10
    丁寧で分かりやすい。色々クリアになった。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • コンピューター:C言語講座:fork,exec,pipeについて

    コンピューター:C言語講座:fork,exec,pipeについて このテーマはどちらかというとUNIX系の話題になってしまうのですが、PC系ではDOSの時代にはマルチタスクができませんでしたので、平行には走れませんでしたが、C言語の処理系独自の関数がたくさんありました。WindowsになってからはUNIX系と似てきましたが、まだ少し違うようです。 自分で作成したプログラムから他のコマンドを実行したい、ということは良くあることだと思います。例えば、ディレクトリーの中身を簡単に得たい場合などはUNIXではlsコマンドを実行させて、結果をもらうのが簡単に思い付くと思います。とくにUNIXのコマンドはそのように組み合わせて使いやすくできていて、必要な情報だけを明確に返答するコマンドがほとんどです(その分、初心者が自分でコマンドを使う時に不親切なのですが)。 system() 大抵の人が上記のような

  • Big Sky :: C言語から使えるJSONパーサ、jansson がとても直感的で良い

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、JSMNを試してみた。 何も見ずにC++でjsonパーサが書けるか試してみた。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 最近は結構 matsuu さんのブクマから見つけて記事を書いてたけど今日はそうじゃない所からご紹介。 Jansson — C library for working w

    Big Sky :: C言語から使えるJSONパーサ、jansson がとても直感的で良い
  • lldbの使い方備忘録 | monolog

    メモリ管理周りで色々ハマってたのだけど、普通にデバッガを使えばよかった。 Mac OSX だと、gdb より lldb を使う方が環境的に整ってて楽っぽい。LLVMさまさまだ。 LLDBの使い方(チュートリアル日語訳) | こん とりあえずここを読めばいいと思います。 以下は、上を読みながら実際にどのようにして作業を行ったかという流れのメモ。 まず、コンパイル時に -g オプションをつけてコンパイルすること (これによって変数名や関数名のようなデバッグ情報が埋め込まれる) $ pgrep a.out なんかでプロセスのpidを取得して、 $ lldb -p [pid] で対象プロセスにアタッチ (lldb) breakpoint set -n malloc_error_break とすると、mallocにまつわるエラーにブレークポイントがセットできる (その他のブレークポイント等は元記事

    lldbの使い方備忘録 | monolog
  • 関数型プログラミングとは結局何なのか | 黒曜の吹き溜まり

    この記事はドワンゴ Advent Calendar 2014の14日目です。 ちなみに前日は@erukitiさんでした。 他の方は「こんなもの作ってみた!」系の記事が多いのですが、技術系の話題であれば特に縛りはないようなので、今回はひたすら文章をつらつらと綴っていきたいと思います。 ここ数年、「マルチコア時代の主流は関数型だ」とか「Javaはもう古い! 時代は関数型!」といった記事をよく見かけるようになった気がします。 大学でOCamlを学んできた自分としては嬉しい限りなのですが、なんだか関数型という言葉がバズワード的な使われ方をしている気がして、まるで「現在起こっている全ての問題を解決する銀の矢だ!」といわんばかりの雰囲気を感じるのが気になっています。 最近うちの部署でもにわかに「関数型っぽく書こう」みたいな機運が高まってることもあるので、この機に関数型プログラミングとはなにか、どのよう

  • 第4回 サインカーブを使用して画像を揺らす その3 | TAKABO SOFT

    ドット絵エディタ「EDGE2」、MIDI音楽編集ソフト「Domino」、楽曲などを配布している個人サイトです。 サンプルコードのダウンロード では、まずサンプルコードをダウンロードし、解凍してください。 私はVisual C++6.0でコンパイルしているので、お持ちの方はVisual C++プロジェクトファイルを開いてください(「effec_04.dsw」をダブルクリックすれば開けます)。 圧縮ファイルに含まれる「effec_04.exe」をダブルクリックし、実行してみてください(何かキーを押すと終了します)。 どうでしょう?画面が切り替わり、写真が波紋のような歪み方をすると思います(謎。 というわけで、今回もサインカーブを使用して画像を歪ませたいと思います。 今回は解りづらいかも さて、今まで演出講座2・3回にてサインカーブを使用して地球を揺らしてきましたが、今回は右の写真のように、写

  • C 言語で HTTP クライアントを作ってみよう (1)

    C 言語で HTTP クライアントを作ってみよう (1) HTTPクライアント C言語版 HTTP プロトコルについては既に解説しましたので、 いきなりソースの解説に入ります。 その前に一応コンパイル方法を説明しておきましょう。 % cc -o http-client http-client.c とすることで、http-client というバイナリが作成されます。 SunOS ではネットワーク関係のライブラリが libc に含まれていないので、 % cc -o http-client http-client.c -lresolv -lsocket -lnsl とライブラリを指定しなければならないでしょう。プログラムの実行は % ./http-client とすることで、http://localhost/ の内容をヘッダも含めて標準出力に出力します。 % ./http-client http

  • グローバル変数

    Mac OS X 向けアプリケーション開発を仕事としている永遠製作所が、日々の開発でつきあたった問題点や、ちょっとしたTipsをメモしていこうと言う、自分勝手な覚え書きブログ。 インターネットの掲示板で初心者からの質問として、二つの画面の間でデータの受け渡しをやりたいがその方法がわからないというのをよく見かける。あ、もちろんiOS SDKプログラミングの話ね。 別にアップルがそのためになにか特別なAPIを用意してくれているわけではないので普通にC言語のブログラミングでやっているようにプログラムを作ればいいだけの話。でもiOSプログラミングでは画面の表示のためにはこのコントローラを使いなさいとか、初期化時にはこのメソッドをオーバーライドしなさいとか、色々決め毎があるのできっとなにか決まりがあるんだろうと思ってしまい見つけられずに質問をするのだろう。 とは言え、こう書いた方がiOS的には判りや

  • オブジェクト指向プログラミングの教え方? | システム設計日記

    技術者仲間で話していたら、4月入社の新人に、オブジェクト指向プログラミングをどうやって教えたらよいか?、という話になった。 想定している言語は Java。 ■動物・犬・モデルの説明から ■基用語の説明から:「カプセル化とは」「継承とは」... ■サンプルコードから: System.out.println( "hello world" ) ... どのパターンでもうまくいかなかったので、今度の新人研修では何か工夫したいね、という話。 結論から言うと「これだ」というアイデアがでたわけではないが、話の内容は、いろいろ興味深かったのでメモ書き。 Java はオブジェクト指向の言語なの? Java は、ある意味 C言語の仲間。ある側面はほとんど同じ言語。 ・int, long (プリミティブなデータ型) ・配列操作 ・if/for/return ここだけ見れば、C言語のまま。つまり命令型、手続き

  • GLUTによる「手抜き」OpenGL入門

    資料: 今までにあった質問 リフレッシュレートの変更 AUX 版, Indy 版, 書籍版 床井研究室 (OpenGL 関連記事) 柴山 健伸 先生 (システム工学部情報通信システム学科) の混沌としたサンプル 陳 謙 先生 (システム工学部デザイン情報学科) の Motif を使ったサンプル 中山 礼児 氏 (経済学部 2000 年卒) の Delphi についての解説 The OpenGL WEB Site (OpenGL の総山) GLUT - The OpenGL Utility Toolkit (OpenGL.org の GLUT のページ) OpenGL Code & Tutorial Listings (OpenGL.org のチュートリアル集) OpenGL Technical FAQ (OpenGL について良く聞かれる質問) OpenGL FAQ 日語 (OpenG

  • 世界で2番目にわかりやすいポインタの話

    これ以上に解りやすく説明できるという人は、@super_rti までURLを教えて下さい。世界一わかりやすいの看板を差し上げます。

    世界で2番目にわかりやすいポインタの話
  • 1