タグ

cに関するkamei_rioのブックマーク (16)

  • 「この位置に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
    kamei_rio
    kamei_rio 2020/10/20
    "main() 中に printf() が無い場合は fizzbuzz() 中の未初期化の変数 next は偶々初期値が 0 となりループが機能しない" そうなんだ
  • 脆弱性が多いプログラミング言語、第2位はPHP - 第1位は?

    WhiteSource Softwareは3月19日(米国時間)、「Is One Programming Language More Secure Than The Rest?」において、過去の脆弱性情報を集計し、どのプログラミング言語がより多くの脆弱性とかかわりを持っていたのかについて伝えた。 脆弱性情報が多い順にまとめたプログラミング言語ランキングとしては、以下が報告されている。 C言語 (47%) PHP (17%) Java (12%) JavaScript (11%) Python (6%) C++ (6%) Ruby (5%) 資料: WhiteSource Software データソースはNVD (National Vulnerability Database)、各種セキュリティアドバイザリ、GitHub、そのほか人気の高いトラッキングシステムなどで集計された脆弱性情報など。

    脆弱性が多いプログラミング言語、第2位はPHP - 第1位は?
    kamei_rio
    kamei_rio 2019/04/02
    Cは仕方ない
  • バカにC言語は難しい~プログラミングの機会損失~

    プログラミングは難しい 注意: この記事は「プログラミング学習とはかくあるべき」、「こうやって学習するのが一番」ということを言いたいのではなく、プログラムを勉強したいが右も左もわからない人に少しでも勇気と情報を与えることを目的としています。過去の挫折経験からか、なかば愚痴っぽくなっていますがご勘弁を はじめに自分のプログラミング歴を軽く紹介して起きます。 年 言語 学習目的 2010 C言語 学校の実習 2011 C++ 組み込み系 2012~2017 None None 2018 Go,Js,Scala,Python 研究、Web開発 といった感じです。2012~2017年がNoneになっているのには原因が「C言語に挫折し、とにかくプログラミングがしたくなかった」からです。そう思ってしまった原因と、そこから立ち直ったことがこの記事を書いた理由です。 「おいおい、C言語ごときで挫折とは情け

    バカにC言語は難しい~プログラミングの機会損失~
    kamei_rio
    kamei_rio 2018/10/23
    ポインタも勿論だけど、文字列が存在しない文字列の扱いと、(C++もだけど)define山盛りでなんだかよくわからない関数とセキュリティあたりをふと気にすると頭がおかしくなる
  • 侍エンジニア塾のC言語のサンプルがヤバすぎる。

    C言語はもうかれこれ10年くらい書いていないけど、流石にこれはヤバい。 正直な感想として、ブランド毀損するくらいの危険性をはらんでいると思う。 当該記事からコピーしてきた。 #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->s

    侍エンジニア塾のC言語のサンプルがヤバすぎる。
    kamei_rio
    kamei_rio 2018/10/17
    マジヤバイまちがいNULL
  • 例え話をしないC言語のポインタの説明 | 右や左の旦那様

    まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。 それでもなお「ポインタがわかりづらい」という人が後を絶ちません。 もういっそのこと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。 Hello, Worldより簡単に サンプルコード 以下のコードを考えます。 void main() { int a; int b; int c; a = 1; b = 2; c = a + b; } 「#include <stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。 まぁ見ての通り、どこにも何も出力されませんが。 このプログラムは、「c = a + b」

    例え話をしないC言語のポインタの説明 | 右や左の旦那様
    kamei_rio
    kamei_rio 2018/02/01
    戻り値とかでメモリ節約できるし加算減算も便利だけど、今更どうでもいいよね。共用体とかマジ使ったトキないし
  • TechCrunch

    [A version of this piece first appeared in TechCrunch’s robotics newsletter, Actuator. Subscribe here.] Earlier this month, Google’s DeepMind team debuted Open X-Embodiment, a database of robotic

    TechCrunch
  • Microsoft、C言語を拡張する「Checked C」を開発中

    fossBytesに6月14日(米国時間)に掲載された記事「Microsoft Open Sources "Checked C" — An Extended Version Of C To Avoid Coding Errors」が、Microsoftにより開発が進められている「Checked C」と呼ばれる技術について伝えた。「Checked C」はC言語を拡張する機能で、より安全なコーディングが可能になるとされている。 Microsoftのソフトウェアの多くはC/C++で開発されている。C言語はポインタの扱いを間違えると来アクセスしてはいけないメモリを指した操作をしてしまうことがあり、これがバグや脆弱性の原因の1つになっている。「Checked C」はこうした問題を回避することを目指してC言語の機能を拡張するもので、ポインタに対してあらかじめ範囲情報を持たせておき、ポインタの指し示す

    Microsoft、C言語を拡張する「Checked C」を開発中
    kamei_rio
    kamei_rio 2016/06/17
    "ポインタに対してあらかじめ範囲情報を持たせておき" 今更安全面で拡張するとか、すごいなMicrosoft
  • 2016年、C言語はどう書くべきか (後編) | POSTD

    (前編はこちら: 2016年、C言語はどう書くべきか (前編) ) (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) システム依存の型 まだ「32 bitのプラットフォームでは32 bitのlong型、64 bitのプラットフォームでは64 bitのlong型がいい」という不満があるようですね。 プラットフォームに依存する2つの異なるサイズを使うため、 故意に コードを難しくすることを考えたくなければ、システム依存の型のために long を使おうとは思わないでしょう。 この状況では、プラットフォームのためにポインタ値を保持する整数型、 intptr_t を使うべきです。 モダン32-bitプラットフォームでは、 intptr_t は int32_t です。 モダン64-bitプラットフォームでは、 intptr_t は int64_t です。 int

    2016年、C言語はどう書くべきか (後編) | POSTD
    kamei_rio
    kamei_rio 2016/02/20
    intptr_t, size_t, malloc…… / セキュリティあんまり詳しくないけど、BOF対策として安全な関数を使いましょう、はもう当たり前なのかな
  • 2016年、C言語はどう書くべきか (前編) | POSTD

    (訳注:2016/3/2、いただいた翻訳フィードバックをもとに記事を修正いたしました。) (訳注:著者のMattより、「文中で明言はしていないが、この記事の内容はx86-64 Unix/Linux/POSIXでアプリケーションをプログラミングする場合にフォーカスしている。他のプログラミング領域では、対象とするシステムに応じた(例: 8-bitの組み込みシステム、10年前のコンパイラ、多くの異なるCPUアーキテクチャで動く必要のあるアプリケーション、Win/Linuxでのビルド互換性など)特有のアドバイスが必要」との補足を頂いております。) 以下の文章は2015年の始めに書いたドラフトで、今まで公開していませんでした。私のドラフト用フォルダの中で誰の目も引かなかったため、大部分が書いた時のままです。公開するにあたり、単純に2015年を2016年に変更しました。 必要な修正、改善、苦情があり

    2016年、C言語はどう書くべきか (前編) | POSTD
    kamei_rio
    kamei_rio 2016/02/18
    "int8_t、int16_t、int32_t、int64_t – 符号付き整数型" だけでもよりどりみどり。マルチバイト文字とか気にしたら負け
  • C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD

    ビジターの皆さんへ C言語に関心を寄せていただきありがとうございます。このページは、C言語の面白い問題、パズルのリストです。これまでに友人たちからeメールで送ってもらったり、で読んだり、インターネットで見つけたり、あるいは自分でC言語でコーディングしていて気づいたりしたプログラムを集めました。 多くのプログラムは、コンパイル、実行され、その振る舞いを示すものです。問題は大まかに次のカテゴリに分けられます。 一般的なタイポエラー。C言語プログラマが頻繁に犯すミスであり、かつ追跡が困難。 初見では非常に理解しがたい小さなプログラム。これらの問題は、他人が書いた優れたコードを読み解く良い訓練になります。 また、全てにGnu/Linux/gccを使っています。掲載順は、それぞれの難易度とは関係ありません。問題解決の助けが必要な場合は、気軽に私に問い合わせてください。連絡先は こちら です。また、

    C言語パズル集:Cにまつわる興味深い問題あれこれ | POSTD
  • C言語分かってなかった (I Do Not Know C) - Qiita

    Dmitri Gribenko氏によるBlog記事 "I Do Not Know C" より訳出。原文および訳文のライセンスは CC BY-SA 3.0 に従う。 この記事の目的は、皆に(とくにCプログラマに)「C言語分かってなかった」と言わせることです。 C言語の死角は思っているよりも身近にあり、よくある単純なコードですら 未定義動作(undefined behavior) を含む可能性があると示したいと思います。 記事は質問に対する回答の形をとります。全ての例示コードは別々のファイルに分かれていると考えてください。 (訳注:Qiita/Markdown表現の制約から、読中ネタバレ防止のため文章順序を変更しています。前半には質問のみを、後半には質問と回答の対を訳出しました。) 質問編 1.

    C言語分かってなかった (I Do Not Know C) - Qiita
    kamei_rio
    kamei_rio 2015/03/10
    いつからC言語がわかっていると錯覚していた? / 未定義という潔さは面白いけどほぼ確実に死ぬ
  • C言語の開発者によるgoto文の使い方を対象とした実証研究の結果、「goto文は無害だと考えられる」 | スラド デベロッパー

    Edsger Dijkstra氏がgoto文の危険性を主張したのは1968年。それから50年近く経過した現在もgoto文は使われ続けているが、Dijkstra氏が懸念したようなgoto文の無制限な使用が行われているのかどうかという点や、それがバグの原因となるような有害なものなのかどうかといった点については、よくわかっていなかったという。こういった点に関する実証研究が家/.で紹介されている。 家/.「Empirical Study On How C Devs Use Goto In Practice Says "Not Harmful"」より 200万近いC言語のファイルと1万1千件を超えるプロジェクトからランダムに抽出した統計的に有効なサンプルを質的および量的に分析したところ、開発者はほとんどの場合gotoの使用を適切に制限しており、Dijkstra氏が懸念したような無制限な使用は行わ

    kamei_rio
    kamei_rio 2015/02/16
    "開発者はほとんどの場合gotoの使用を適切に制限しており" つまり適切に制限しないと有害だと
  • わずか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」 | ソフトアンテナ
    kamei_rio
    kamei_rio 2014/11/18
    あとでVC-3000に教える
  • Programming-language - なぜ null はそのプログラミング言語にあるのか(その1 - ”無”の無い世界) - Qiita

    前提 TaPL 読みながら Haskell/Denotational semantics 見て、自分なりに納得した己が解釈を文芸的に綴っていくだけの内容です 序: void, null, undefined, (), [], ⊥ どんな言語でも「空っぽ」なり「無い」なり「未定義」なりを意味する値が用意されており、型付けが動的だろうと静的だろうとこれらに対してだけはヤケに自由度の高い用法を許されています。 Haskell の undefined と ( ) 型 Haskellであっても、以下のコードは「正しく型づけされ、正しく動作する」としてコンパイルが通ります fib :: Integer -> Integer fib 0 = 1 fib 1 = 1 fib n | n > 1 = fib (n - 2) + fib (n - 1) | otherwise = undefined -- (

    Programming-language - なぜ null はそのプログラミング言語にあるのか(その1 - ”無”の無い世界) - Qiita
    kamei_rio
    kamei_rio 2014/09/09
    不定こわい
  • 男なら潔くC言語書けよと言われた話。〜mod_db,mod_dbdの実装〜 - Y's note

    C実践プログラミング 第3版 作者:Steve Ouallineオライリー・ジャパンAmazon 恩師に言われた言葉 Geek女優の池澤あやかさんに会いたいと思っている@yutakikuchi_です。 池澤さんはRubyが出来てSFCで女優さんなんて羨ましいですね〜。僕なんてRubyは得意じゃないし東京とは言えないような都心から離れた場所の地味な国立大だし、何よりお金も無いパンピーだしね〜。 僕の学生時代にもRubyはあったんですけどRailsはまだ出始めでそんなに流行っている雰囲気は無かったし、Webを書くには面倒くさいJSP/ServletかPerlかって感じでした。ApacheのModuleでWebを書ける事も学生ながら知っていたんですが、ポインタ、メモリの動的確保/解放の間違いが頻発して開発効率が落ちるから極力Javaで、どうしてもCを書かなければ行けない時はC++で逃げてました。

    男なら潔くC言語書けよと言われた話。〜mod_db,mod_dbdの実装〜 - Y's note
    kamei_rio
    kamei_rio 2014/04/05
    メモリをちまちま管理するのは女々しい男しかできない感じする(個人の感想であり、効能を保証するものではありません
  • C99の仕様

    長い歴史を持ちながら、依然として人気の高いC言語。その最新仕様の情報にキャッチアップするための連載スタート。今回は1999年に策定された「C99」を取り上げる。 連載 INDEX 次回 → C言語(以降、単にC)はDennis Ritchieによって1969~1973年の間にベル研にて開発されたプログラミング言語である。長い歴史を持つと共に非常にポピュラーな言語で、プログラマーでCを知らない人はまずいないと言っていいだろう。プログラミング言語のシェアを調査しているTIOBEでも、ここ最近は常に1、2位を占めている。 Cの言語仕様は今から25年近く前である1989年に初めて規格化され、これは一般に「ANSI-C」と呼ばれている。ANSI-Cは長らくCの言語仕様のスタンダードの位置を占め、世の中の大半のプログラマーは、このANSI-Cに慣れ親しんでいることだろう。しかし、実はCの言語仕様はその

    C99の仕様
  • 1