タグ

GCCとCに関するAmaiSaetaのブックマーク (3)

  • 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
    AmaiSaeta
    AmaiSaeta 2020/02/16
    本題からはズレるけど、 "整数からポインタへの変換は処理系定義である" ってマジか。稀に、相互変換が出来る事が前提の処理が在るよね (Win32 API で見た記憶が)。
  • Why does the C preprocessor interpret the word "linux" as the constant "1"?

    Why does the C preprocessor in GCC interpret the word linux (small letters) as the constant 1? test.c: #include <stdio.h> int main(void) { int linux = 5; return 0; } Result of $ gcc -E test.c (stop after the preprocessing stage): .... int main(void) { int 1 = 5; return 0; } Which of course yields an error. (BTW: There is no #define linux in the stdio.h file.)

    Why does the C preprocessor interpret the word "linux" as the constant "1"?
  • www.textfile.org - Super Technique 講座〜longjmpと例外

    http://www.nurs.or.jp/~sug/soft/super/longjmp.htm だから、コメントのかたちで /* NOTREACHED */ と書いてやると、コンパイラはこのコメントを認識し、このコメントには制御が移らないことを理解する。 ... ちなみにこのようにコンパイラが認識する特殊なコメントとしては、switch 文の FALLTHROUGH を「判って書いている」ことを伝える /* FALLTHROUGH */ があることはご存知かな? へえ当!? 知らなかった。 via http://d.hatena.ne.jp/higepon/20061114/1163517868 追記: http://www.linux.or.jp/JM/html/GNU_gcc/man1/cpp.1.html -lint コメント中に埋め込まれた、プログラムチェッカ lint のコ

    www.textfile.org - Super Technique 講座〜longjmpと例外
    AmaiSaeta
    AmaiSaeta 2006/11/19
    "/* NOTREACHED */と書いたらそのコメント以下に制御が移らないと表明できるそうな。あと /* FALLTHROUGH */
  • 1