Open6

C言語をReactしか知らない人が学ぶ

Kazuma HoriikeKazuma Horiike

環境構築

コンパイラ

TL, DR;
C言語のコンパイラ「gccclang)」はMACの場合、最初から入っている。

MACでは最初からclangというコンパイラがインストールされていて、エイリアスとしてgcc設定しているので、gcc -vclang -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
Kazuma HoriikeKazuma Horiike

Hello World

TL, DR;
gcc -o hello hello.c && ./hello
  1. 適当に作業用ディレクトリを作成してcode .でVScodeを開く。
  2. ファイル「hello.c」を作成。
  3. 中身
#include <stdio.h>

int main (void) {
  printf("Hello World!");
  return 0;
}
  1. コンパイル
gcc -o hello hello.c

helloというファイルが生成される。

  1. 実行
./hello

Hello World!
Kazuma HoriikeKazuma Horiike

C言語のキモさ

C言語という宇宙人はReactしか知らない僕にとってキモい文化がいくつかあります。

絶対「;」をつける

これはJSでもつけるのですが、JavaScriptエンジンは「自動セミコロン挿入」(ASI) という機能を持っており、ほとんどの場合、セミコロンを省略しても適切な場所にセミコロンが挿入されると解釈されるのに対して、C言語は文の終わりにセミコロンがないとエラーになります。

型が1文字くらい

TSでは型宣言をするとき、stringnumberのように読んで理解できますが、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が適応される
Kazuma HoriikeKazuma Horiike

勝手に解釈しているコト

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) { }