![コンパイラが作ったバイナリをつなぎ合わせるプログラム 「lld」の作者が語る、リンカの仕組み](https://cdn-ak-scissors.b.st-hatena.com/image/square/c97ddf5048f4bcd8e99174be7b113a7a96c5dd14/height=288;version=1;width=512/https%3A%2F%2Fimg.logmi.jp%2Farticle_images%2FJfQaErs6FFFDNMMSp1jduE.png)
発端は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
まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。 それでもなお「ポインタがわかりづらい」という人が後を絶ちません。 もういっそのこと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。 Hello, Worldより簡単に サンプルコード 以下のコードを考えます。 void main() { int a; int b; int c; a = 1; b = 2; c = a + b; } 「#include <stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。 まぁ見ての通り、どこにも何も出力されませんが。 このプログラムは、「c = a + b」
こんにちは。谷口です。 ITエンジニアの転職やプログラミング学習に関する仕事をしている私ですが、学生の頃は文系の学部に所属し、プログラミングには全く触れたことがありませんでした。 新卒の時はそんな状態で、自分に特性があるのかどうかもよく分からないまま、面接をしてくれた人事担当者の「プログラミングは研修を受ければできるようになるから大丈夫」の言葉を信じて、受託開発をしている企業に入社しました。 そして新人研修で生まれて初めてプログラミングに触れ、勉強する中で、一歩進もうとする度につまずき、進んだと思ったら二歩前に覚えたことを忘れ、ということを繰り返しながら、何とか働いてきた時期がありました。 プログラミングのプの字も知らなかった新人の頃にどこでつまずいてきたかを思い出しながら書いてみたいと思います。 ■代表的なつまずきポイント ◆1.Hello Worldの段階からつまずく 研修で最初に勉強
C言語の可変長引数は、型安全でない(まちがった型の引数を渡してもコンパイルエラーにならない)とされています。これは言語仕様の理解としては正しいのですが、特定の型の引数を任意の個数とる関数に限っては、マクロを使うことで型安全性を確保することができます。 任意の個数のdoubleを引数にとり、その和を返す関数「sumf」を例にあげて説明します。 C言語の可変長引数機構を使ってsumfを定義すると、以下のようになります。 #include <math.h> #include <stdarg.h> #include <stdio.h> static double sumf(double nfirst, ...) { double r = 0, n; va_list args; va_start(args, nfirst); for (n = nfirst; ! isnan(n); n = va_a
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く