Open6
C言語をReactしか知らない人が学ぶ
僕にはC言語がこのくらい未知だった
React(JS)しか知らない僕がC言語という宇宙人と仲良くなるまでの覚書。
環境は
MAC Book Air M2。
下記の記事の内容でVScodeなどをインストール済み。
環境構築
コンパイラ
TL, DR; |
---|
C言語のコンパイラ「gcc (clang )」はMACの場合、最初から入っている。 |
MACでは最初からclang
というコンパイラがインストールされていて、エイリアスとしてgcc
設定しているので、gcc -v
やclang -v
では同じ内容↓が表示される。
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Hello World
TL, DR; |
---|
gcc -o hello hello.c && ./hello |
- 適当に作業用ディレクトリを作成して
code .
でVScodeを開く。 - ファイル「hello.c」を作成。
- 中身
#include <stdio.h>
int main (void) {
printf("Hello World!");
return 0;
}
- コンパイル
gcc -o hello hello.c
hello
というファイルが生成される。
- 実行
./hello
Hello World!
C言語のキモさ
C言語という宇宙人はReactしか知らない僕にとってキモい文化がいくつかあります。
絶対「;」をつける
これはJSでもつけるのですが、JavaScriptエンジンは「自動セミコロン挿入」(ASI) という機能を持っており、ほとんどの場合、セミコロンを省略しても適切な場所にセミコロンが挿入されると解釈されるのに対して、C言語は文の終わりにセミコロンがないとエラーになります。
型が1文字くらい
TSでは型宣言をするとき、string
やnumber
のように読んで理解できますが、C言語は%s
や%d
です。
JavaScript (型) | C (フォーマット指定子) |
---|---|
string | %s |
number | %d (整数) |
number | %f (浮動小数点数) |
boolean | %d (1 または 0) |
補足
- JavaScript では、string、number、boolean など基本的なデータ型があり、これらは文字列、数値、真偽値を直接表します。
- C 言語 では、printf や scanf で出力や入力を扱う際にフォーマット指定子を使用します。ここでの %s は文字列、%d は整数、%f は浮動小数点数を指します。C 言語では真偽値の型(bool)は C99 以降で標準化されており、true/false を 1/0 として %d で扱うことが一般的です。
文字列の中に変数を書く
C言語では文字列の中に直接変数を書けるようです。
// 僕の常識
console.log(`こんにちは${name}さん!`)
// 宇宙人
printf("こんにちは%cさん!\n",name);
イメージ的には変数が入る予定の部分を宣言しておいて、第二引数に使う変数を順番に指定する感じ。?
第一引数 | 第二引数 |
---|---|
"こんにちは%cさん\n" | %cに変数が入る予定 |
name | 入る予定だったところにnameが適応される |
勝手に解釈しているコト
C言語という宇宙人と少しだけ仲良くなってきました。
細かい理解は時間がある時に調べるとして、とりあえず仲良くなるために勝手に解釈したことをまとめます。
(誰か中学生にもわかるように教えてくれないかな…)
#include <xxxxx.h>
該当箇所 | 勝手に解釈 |
---|---|
#include | import |
<stdio.h> | {useState}のような関数名。fromは省略できる。 |
ちなみにstdio
はスタンダードIO(標準的な入出力)
の略。最後に.h
をつけるのは…知らん。
【JS】
import stdio.h from ''
【C】
#include <stdio.h>
int main(void) {}
該当箇所 | 勝手に解釈 |
---|---|
int | function的な |
main | 関数名 |
(void) {} | (引数){ 内容 } |
【JS】
function main () { }
【C】
int main(void) { }