タグ

cに関するrryuのブックマーク (7)

  • 「この位置に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
    rryu
    rryu 2020/10/19
    オーバーランしてるけどたまたま直後にいた奴を犠牲にして動いているのあるある。
  • printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita

    def check(n) s = "*"*n f = open("test.cpp","w") f.puts <<EOS #include <cstdio> int main(){ (#{s}printf)("Hello World\\n"); } EOS f.close() return system("clang++ test.cpp") end check(ARGV[0].to_i) $ ruby check.rb 10000 clang: error: unable to execute command: Illegal instruction: 4 clang: error: clang frontend command failed due to signal (use -v to see invocation) Apple LLVM version 10.0.1 (clang

    printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita
    rryu
    rryu 2019/08/21
    これは式の構文木の高さか要素数の限界ということになるのだろうか。
  • 侍エンジニア塾の記事が炎上しているので追撃してみる

    この記事話題になってますね。セキュリティホールの宝石箱や!って感じ。 https://qiita.com/hamichamp/items/7b7a7ee091a6856ac900 同じ作者の記事で、問題あるのがまだまだ掘れそうだなぁと思ったので、キャストの記事について突っ込んでみます。 https://www.sejuku.net/blog/25737 数値型の精度 まず数値の精度について、以下の順と紹介されてるけど、明らかに間違いですね。 精度の順序は下記のとおりです。 double型 > float型 > long (int)型 > int型 > short (int)型 > char型 longとfloatのどちらが精度が良いか?longで表せる整数範囲に限っては十中八九longの方が良いです。 (処理系依存の話ですが一般的なx86PCであれば)long型とfloat型はともに32b

    侍エンジニア塾の記事が炎上しているので追撃してみる
    rryu
    rryu 2018/10/29
    ミイラ取りがミイラに。C言語の配列名はポインタでは無いがおおむね先頭要素のアドレスとして解釈されるという仕様わかりづらすぎると思う。
  • 侍エンジニア塾の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言語のサンプルがヤバすぎる。
    rryu
    rryu 2018/10/17
    典型的なポインタ分かってない人のコードだった。sizeofに幻想を持ちすぎなので、試したらなんか動いた系の理解っぽい感じ。
  • すごいC言語のマクロ __is_constexpr - Qiita

    #define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) #include<stdio.h> #define Def 10 #define __is_constexpr(x) \ (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) enum test{Enum}; int main(){ int Val = 10; const int Const_val = 10; int a = __is_constexpr(Val); int b = __is_constexpr(Const_val); int c = __is_constexpr(10); int d = __

    すごいC言語のマクロ __is_constexpr - Qiita
    rryu
    rryu 2018/04/19
    この訳の分からない挙動が規格上全くの合法だというのがすごい。
  • Big Sky :: gcc は副作用のある関数呼び出しを含む式評価順序を最適化する。

    2013/04/30 タイトル修正 昨日、とある場所でこんな話で盛り上がった。 逆ポーランド計算機を作ろうと思ったんだけど、どうも結果が期待通りにならない。 ソースコードを見せて貰うと以下の様なコードだった。 #include<stdio.h> #include<stdlib.h> #define MAX_SIZE 100 int stack[MAX_SIZE]; int stack_pointer = 0; void push(int data){ stack[stack_pointer++] = data; } int pop(){ return stack[--stack_pointer]; } int pop1(int n){ printf("pop %d\n", n); return stack[--stack_pointer]; } int main(void){ char s

    Big Sky :: gcc は副作用のある関数呼び出しを含む式評価順序を最適化する。
    rryu
    rryu 2015/11/18
    gccのバグはrand()とかではまりそうな気がするが問題になっていないのだろうか。
  • Linux KernelのLinked Listの実装が面白い件 - 愛と勇気と缶ビール

    最近、Robert Love先生のを暇な時にダラーと読んでいたりするわけですが、それの中にLinux Kernel内部で使われているLinked Listの実装が書いてあって面白かったので共有。 まず、Linked Listの一個一個のエントリを表すstructを定義します。 struct list_head { struct list_head *next, *prev; }; いやいやいやいや。いかにC力の低い僕でも流石にこれはあきません。騙されませんよ。前後のエントリへのポインタは確かにあるけれども、これにはデータを指すためのポインタがないじゃないの。おじいちゃんまたデータ忘れてきちゃったの?いやあねえ。 おじいちゃんは言った。「それはお前の短見というものじゃ。このLinked Listは以下のコードのようにデータ構造に埋め込んで使うものなんじゃよ。」そしてそれは正しかった。 st

    Linux KernelのLinked Listの実装が面白い件 - 愛と勇気と缶ビール
    rryu
    rryu 2012/12/12
    リストヘッダが構造体のどこにあろうとヘッダのアドレスからメンバーオフセットを引けば構造体の先頭アドレスになるという理屈なのか。
  • 1