タグ

cに関するyk5656のブックマーク (23)

  • C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -

    C言語(C++を含む)を習得したい人,ポインタを勉強したい人はgcc-14を使いましょう.難しいところは gcc-14 が丁寧に解説してくれます C言語の難しいところ 例を示します.C言語で記述された,たった6行のソースコードです int main() { int buf[10]; buf[10] = 0; return 0; } このソースコードには問題があります.初見でわかるでしょうか? : : : 問題があるのは buf[10]=0 の部分です.C言語でやりがちなミスですが,これがバグやセキュリティホールの原因になります. C言語が難しい理由は二つあります.この手の問題を見逃しやすい点と,この手の問題を理解することが難しい点の二つです gcc 14 に解説してもらいましょう 上記の6行のソースコードをgcc14を使ってコンパイルしてみます ソースコードのファイル名は test.c と

    C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -
    yk5656
    yk5656 2024/06/12
  • 生のポインタは使わないで! Modern C++のメモリ管理

    連載では、Modern C++と称されるC++について、Modern C++らしい言語仕様をピックアップし紹介していきます。第3回は、スマートポインタについて紹介します。高度なメモリ管理には生のポインタの使いこなしが必須という古い常識はもはや通用しません。メモリを効率よく、しかも安全に使うことを実現しているスマートポインタについて理解を深めます。 はじめに C言語から派生したオブジェクト指向プログラミング言語であるC++は、21世紀に入ってまったく別物とも言えるプログラミング言語に成長していきました。それは、Modern C++と称されています。1990年代にC++を触っていたプログラマが現在の仕様を知れば、隔世感に苛まれるのではないでしょうか。連載では、かつてはC++をたしなんでいたという方、今からC++言語を始めるという方に向けて、Modern C++らしい言語仕様をピックアップし

    生のポインタは使わないで! Modern C++のメモリ管理
    yk5656
    yk5656 2023/10/21
  • Cコンパイラを作ろう!

    こんにちは、21Bのseasonです。この記事はtraP夏のブログリレー3日目の記事です。 自作Cコンパイラでセルフホスト達成しました。 リポジトリ: https://github.com/season1618/c-compiler/tree/main 自作Cコンパイラでセルフホスト達成しました!!!!!!🎉🎉🎉https://t.co/8fLIAJWksQ pic.twitter.com/2fgH5sKoZ0 — season (@season1618) July 27, 2022 実際にどうやって作るかを書くと長くなるので、ここでは経緯とか完成までの流れとかを書こうと思います。一応開発メモは以下に上げておきました。 開発メモ: https://github.com/season1618/note/blob/main/cs/c-compiler/index.md 経緯 大学の講義で

    Cコンパイラを作ろう!
    yk5656
    yk5656 2022/08/14
  • プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話

    プログラム解析入門 もしくはC/C++を安全に書くのが難しすぎる話 Last updated: Jul 30, 2022 Kinuko Yasuda <@kinu>

    プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話
    yk5656
    yk5656 2022/08/01
  • C++の後継目指すプログラミング言語「Carbon Language」、Googleの技術者が実験的公開。C++は技術的負債で改良が困難と

    Google技術者Chandler Carruth氏らは、C++の後継を目指す実験的なプログラミング言語として「Carbon Language」(以下、Carbon)をGitHubで公開しました(Chandler Carruth氏のツイート)。 GitHubのドキュメントでは、C++が性能を重視するソフトウェア開発において主流のプログラミング言語である一方、言語そのものにおいて数十年にわたる技術的負債が蓄積されていることなどにより段階的に改良していくことが極めて困難になっていると指摘。 一方で、GoSwiftKotlinRustを始めとする優れた開発者体験を提供する多数のモダンな言語は、C++の代わりに採用する、あるいはC++の開発から移行するには、プログラミング言語の違いや性能のオーバーヘッドなど障壁が多すぎるといった課題があるとも指摘しています。 そこでC++の段階的な改善では

    C++の後継目指すプログラミング言語「Carbon Language」、Googleの技術者が実験的公開。C++は技術的負債で改良が困難と
    yk5656
    yk5656 2022/07/21
  • Objective-C小史

    Mediumより。 BY ハンセン・スー これまでに、ユーザがダウンロードしたiPhoneアプリは1,400億を超えています1。iPhoneの成功は、サードパーティ製アプリのエコシステムに関係しています。2008年にApp Storeがデビューしたとき、すべてのアプリは、Apple以外のコミュニティではほとんど使われていなかったプログラミング言語Objective-Cで書かれていました。それ以来、Objective-Cの使用は爆発的に増加し、アプリを作る開発者たちのゴールドラッシュとなりました。Appleは2014年に新しい言語Swiftを導入しましたが、AppleのiOSオペレーティング・システムのほとんどは今もObjective-Cで書かれており、今後何年もAppleのデバイスで使用されるでしょう。 多くのプログラマがObjective-Cを知ったのは、iPhoneアプリ革命の時でした

    Objective-C小史
    yk5656
    yk5656 2021/09/28
  • オープン化が進むC++の現状と展望

    AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen

    オープン化が進むC++の現状と展望
    yk5656
    yk5656 2021/08/26
  • C#でまともなアプリ開発を行うために - Qiita

    はじめに C#は「Windowsでしか開発出来ない言語」などクローズドなイメージから一転し、.NET Coreの誕生によって様々なことが出来るようになりました。最近ではokazukiさんのC# で出来ること一覧が大きな反響を呼び、C#であらゆるアプリが作れることを多くの方に知ってもらえたかと思います。C#のよさを知ってもらうことは嬉しい限りではありますが、他言語をやってきた身としてはC#を取り巻くエコシステムの情報が少ないと感じることが多く、新たに参入される方にとって抵抗があるのも事実だと思います。この記事ではまともなアプリ開発を行うために必要なエコシステムなどご紹介し、C#でも快適に開発出来ることを知ってもらえれば嬉しいです。筆者はWEB開発を主としているので、WEB寄りな話が多くなる可能性がありますがご了承下さい。 「まとも」とは? タイトルにも書いたまともなアプリ開発とは、一定の品質

    C#でまともなアプリ開発を行うために - Qiita
    yk5656
    yk5656 2021/01/18
  • ソフトウェア1 (2020)

    ソフトウェア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]

    yk5656
    yk5656 2020/11/19
  • パケットキャプチャツールをつくる - Qiita

    はじめに ネットワークと C 言語の勉強を兼ねて、簡易的なパケットキャプチャツールをつくってみました。参考にしたのは「ルーター自作でわかるパケットの流れ」という書籍です。 表紙に書かれている「ネットワークはどのようにつながるのかパケットの気持ちになって考えてみたことはありますか?」というコメントにが若干引いておりましたが、こういったディープな内容のは中々ないので有り難かったです。なお、このはタイトルのとおりルータを自作することがゴールになっていて、パケットキャプチャツールの作成はそのための練習という位置付けです。 また、特別講座 ネットワークプログラミング ( FWをつくろう )というサイトも非常に参考になりました。図入りで説明されていてとても分かりやすかったです。 ちなみに、C 言語は大学の時に少しかじったものの、ほぼ初心者に近い状態だったので Udemy の「イメージでわかる!基

    パケットキャプチャツールをつくる - Qiita
  • 旧石器時代のポインタをご利用の皆様へ ~provenance入門~ - Qiita

    現代のプログラミング言語ではポインタは単なるアドレスではなく,provenanceを伴った参照として扱われています. 世界は既に変わっています. 概要 ポインタは単なるアドレスではありません. ポインタにはprovenanceという,どのオブジェクト由来かの情報が含まれています. Provenanceを使うことで,最適化が効きやすくなったり,堅牢なプログラムを書きやすくなったりします. 追記: 次の英語記事を読むとprovenanceが必要な理由についてもっとよく知ることができます.クリックしよう!!!!(2020-12-15) https://www.ralfj.de/blog/2020/12/14/provenance.html ポインタはアドレスではない 次のCプログラムを見てみましょう. #include <stdio.h> #include <string.h> int main

    旧石器時代のポインタをご利用の皆様へ ~provenance入門~ - Qiita
    yk5656
    yk5656 2020/09/07
  • ゲーム開発者のための C++11~C++20, 将来の C++ の展望 - CEDEC2020 - Speaker Deck

    ゲーム開発者のための C++11~C++20, 将来の C++ の展望 【CEDEC ページ】https://cedec.cesa.or.jp/2020/session/detail/s5e8327a52702c 【解説付きの書籍版 📚】https://zenn.dev/tetsurom/books/cpp11-cpp20-for-game-developers

    ゲーム開発者のための C++11~C++20, 将来の C++ の展望 - CEDEC2020 - Speaker Deck
    yk5656
    yk5656 2020/09/03
  • Linuxカーネルで学ぶC言語のマクロ - 覚書

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。 #define swap(a, b) \ do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) 注目すべきはマクロの定義全体を囲んでいるdo { ... } while (0)という表記です。初見の人には何のことかわからないと思います。考えられる最も単純な定義から遡って、なぜこ

    Linuxカーネルで学ぶC言語のマクロ - 覚書
    yk5656
    yk5656 2020/06/29
  • 浮動小数点数オタクが AtCoder Beginner Contest 169 のC問題をガチで解説してみる - Qiita

    どうも、浮動小数点数オタクのmod_poppoです。 昨日開催された ABC169 の C 問題が浮動小数点数の罠な問題だったらしいので、どこが罠なのか、そしてどうすれば罠を回避できるのかを解説してみます。 また、典型的な誤答に対しては、それを落とすためのテストケースも用意しました。 問題文(引用) まず最初に問題文を引用しておきます。 AtCoder Beginner Contest 169 | C - Multiplication 3 問題文 $A\times B$ の小数点以下を切り捨て、結果を整数として出力してください。 制約 $0\le A\le 10^{15}$ $0\le B<10$ $A$ は整数 $B$ は小数第 2 位まで与えられる 入力 入力は以下の形式で標準入力から与えられる。

    浮動小数点数オタクが AtCoder Beginner Contest 169 のC問題をガチで解説してみる - Qiita
    yk5656
    yk5656 2020/06/02
  • なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ

    プログラミング言語としてのCは、初学者にとっては難しい言語であるのは確かです。中には、初心者が学ぶべき言語ではないと言い出す人もいます。ですが、私たちセキュリティ・ネットワークコースの教員は、我々のコースの学生は早期にCを学ぶべきであると考え、このカリキュラムを設定しています。以下に理由を列挙します。 Cはコンピュータの構造に深く根ざした言語なので、コンピュータそのものの学習を同時に進めることで、相互の理解が深まると考えています。例えば主記憶(メモリ)上にプログラムとデータの双方が置かれるフォン・ノイマンアーキテクチャや、メモリ上のデータ配置の問題、エンディアンの問題などを直接感じられるのはCならではだと思います。 CはOSや、コンパイラなどの言語処理系、組み込み機器などで広く使われており、その構造や動作と深く関わっているため、セキュリティとネットワークの理解のために欠かせないからです。

    なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ
    yk5656
    yk5656 2020/05/26
  • 授業課題でC言語の謎のエラーに困っていた→社会人大学院生(元金融SE)が、スペースを11個ほど追加してあげたらエラーが消えた!どういうこと?

    服さん @fukusanity 修士の頃、授業の課題でC言語書いてる時にどうしても謎のエラーが出て困っていた。それを見たSE経験(金融系)がある社会人大学院生の同期の女性が「ここにスペースを入れてみて」「もっと沢山、もっともっと」と言い出して、スペースを11個ほどコードに挟み込んだらエラーが消えた。怖かった 2020-02-21 00:45:53 服さん @fukusanity 驚いて「なんでこんなことになるんですか」「ていうかなんでわかったんですか」と聞いたけど「まあなんとなく」「勘」などと言ってはぐらかされた。「目で見てメモリダンプがわかる」みたいな話を聞くと彼女のことを思い出す。言語化できない知見で計算機の息遣いを察する能力は側から見ると霊感に近い 2020-02-21 00:45:54 服さん @fukusanity 彼女は当時参加してた研究のメンバーだったので共著で論文を書いたり

    授業課題でC言語の謎のエラーに困っていた→社会人大学院生(元金融SE)が、スペースを11個ほど追加してあげたらエラーが消えた!どういうこと?
    yk5656
    yk5656 2020/02/22
  • C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium

    発端はuchan_nos氏によるこのツイートでした。 C言語で、当にメモリの0番地にデータを書きたいときはどうすりゃええの?— うー@技術書典8 Day1う31 BitNOS (@uchan_nos) 2020年2月12日 それに対する私のリプライ: uint8_t *p = 1; p--; *p = v;— hikalium (@hikalium) 2020年2月12日 私はこれで話が終わると思っていたのだが、どうやらそうではなかったらしく、色々な視点からの意見が加わりながら、話は混沌を極めたのでした…。 ということで、ここに私のこのツイートに対しての見解とか、わかったことをまとめておこうと思います。 私のリプライの背景について uchanさんが求める「0番地にデータを書きたい」という課題設定を、私はこのように解釈しました。 C言語において、整数0をポインタに変換すると、それはNULL

    C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium
    yk5656
    yk5656 2020/02/16
  • 「ループ・再帰・gotoを使わず1から100までの数値を印字する」Conner Davis 氏の回答の考察 - Qiita

    2019年6月に以下の記事が投稿されました。 ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?に対するIchi Kanayaさんの回答 - Quora 英語版の記事「How to print 1 to 100 in C++ without a loop, goto or recursion - Quora」から興味深い回答を抜き出して、それにランク付けをしながら和訳してくださっている記事です。 初級や中級は「まぁあるよね(C++知らないけれど……)」という感じですが、 上級とされた「マイクロソフト社のデータサイエンティスト Conner Davis 氏」の回答が面白かった ので、ご紹介を兼ねてその発想の源泉を推測してみることにしました。 以下に Conner Davis 氏の回答の和訳を引用します。 マイクロソフト社のデータサイエンティスト Conn

    「ループ・再帰・gotoを使わず1から100までの数値を印字する」Conner Davis 氏の回答の考察 - Qiita
    yk5656
    yk5656 2019/11/30
  • ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?

    回答 (11件中の1件目) 追記 再帰のルールをよく理解してませんでした。 分かりやすい例として載せておきます。 [code]#include template struct print { print() { std::cout << N << std::endl; } }; template struct Print { Print() { Print(); print(); } }; template<> struct Print<0> { Print() {} ...

    ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?
    yk5656
    yk5656 2019/06/21
  • 【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) の日報
    yk5656
    yk5656 2019/04/19