タグ

プログラミングとCに関するedo_m18のブックマーク (8)

  • 【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報

    C言語で引数なしの関数を書くときに void を書かないのと書くのとで挙動が違うなんて話を聞いたことはないでしょうか? つまり void func() {} と void func(void) {} で挙動が違うという話ですね。 自分も話だけ聞いたことがあったものの2つがどう違うのかはわかっていなかったため、C言語の規格を読みながら何が違うのかを調べてみました。 結果だけ述べると、この2つの書き方は同じように見えて実は明確な違いがあり、引数がない関数を定義/宣言する場合には後者を使うのが適切です。 とは言え、2つの書き方で違いがあるとかほんとかよ?と思う方もいると思うので、まずはこの二つがどう違うのか見ていきましょう。 2つの関数の書き方の違い 早速ですが、以下のプログラムを見てみましょう。 // func_empty.c void func() {} int main(void) { f

    【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • extern "C" - debian36の日記

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

    extern "C" - debian36の日記
  • データ型のアラインメントとは何か,なぜ必要なのか?

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

    edo_m18
    edo_m18 2015/04/10
    丁寧で分かりやすい。色々クリアになった。
  • コンピューター:C言語講座:fork,exec,pipeについて

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

  • SSL/TLS でアクセスしてみよう (1)

    SSL とは SSL (Secure Socket Layer protocol) とは「セキュリティ機能付き HTTP」のことです。 オンラインショッピングサイトで住所・氏名などの個人情報を入力する際、 「このページは暗号化されています」 などとダイアログが表示されることがありますが、 そのとき「http://....」という URL ではなく 「https://....」という URL にアクセスしているはずです。 このとき使用されているプロトコルが SSL です。 SSL を使用しているかどうかは、右図のようなブラウザ右下の鍵のマークを見てもわかります。 鍵がきっちりはまっているのは SSL を使用しているということです。 一方、鍵が外れている状態は SSL を使用していない、ということです。 SSL を使用することによって、以下の効果があります。 盗聴防止 改竄防止 なりすまし防止

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • 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

  • 1