このガイドでは、Cb言語の基本的な構文と使い方を学びます。
Cbプログラムは、main関数から始まります。
int main() {
println("Hello, Cb!");
return 0;
}
戻り値の型 関数名(引数)の形式で関数を定義main関数は必須のエントリーポイントreturn 0;で正常終了を示す- セミコロン(
;)で文を終了
int main() {
// 整数型
tiny t = 100; // 8bit整数 (-128 ~ 127)
short s = 1000; // 16bit整数 (-32768 ~ 32767)
int i = 100000; // 32bit整数
long l = 10000000; // 64bit整数
// 浮動小数点型
float f = 3.14; // 32bit浮動小数点
double d = 2.718; // 64bit浮動小数点
// 文字列・文字・真偽値
string str = "Hello";
char c = 'A';
bool flag = true;
return 0;
}
int main() {
unsigned tiny ut = 255;
unsigned int ui = 4000000000;
// 負値は自動的に0にクランプ(警告が出る)
unsigned int x = -10; // x は 0 になる
return 0;
}
int main() {
const int MAX = 100;
// MAX = 200; // エラー: constは変更できない
int value = 42;
const int* ptr = &value;
// *ptr = 100; // エラー: const経由の変更は禁止
return 0;
}
int main() {
int a = 10;
int b = 3;
int sum = a + b; // 13
int diff = a - b; // 7
int prod = a * b; // 30
int quot = a / b; // 3
int rem = a % b; // 1
return 0;
}
int main() {
int x = 10;
int y = 20;
bool eq = (x == y); // false
bool ne = (x != y); // true
bool lt = (x < y); // true
bool gt = (x > y); // false
bool le = (x <= y); // true
bool ge = (x >= y); // false
return 0;
}
int main() {
bool a = true;
bool b = false;
bool and_result = a && b; // false
bool or_result = a || b; // true
bool not_result = !a; // false
return 0;
}
int main() {
int a = 12; // 0b1100
int b = 10; // 0b1010
int and_bit = a & b; // 0b1000 = 8
int or_bit = a | b; // 0b1110 = 14
int xor_bit = a ^ b; // 0b0110 = 6
int not_bit = ~a; // ビット反転
int left = a << 1; // 0b11000 = 24
int right = a >> 1; // 0b0110 = 6
return 0;
}
int main() {
int x = 10;
x += 5; // x = x + 5; → 15
x -= 3; // x = x - 3; → 12
x *= 2; // x = x * 2; → 24
x /= 4; // x = x / 4; → 6
x %= 4; // x = x % 4; → 2
x &= 3; // x = x & 3; → 2
x |= 4; // x = x | 4; → 6
x ^= 2; // x = x ^ 2; → 4
x <<= 1; // x = x << 1; → 8
x >>= 2; // x = x >> 2; → 2
return 0;
}
int main() {
int x = 10;
// 前置
int a = ++x; // x = 11, a = 11
int b = --x; // x = 10, b = 10
// 後置
int c = x++; // c = 10, x = 11
int d = x--; // d = 11, x = 10
return 0;
}
int main() {
int x = 10;
int y = 20;
int max = (x > y) ? x : y; // max = 20
println("Max:", max);
return 0;
}
int main() {
int score = 85;
if (score >= 90) {
println("優秀");
} else if (score >= 70) {
println("良好");
} else if (score >= 60) {
println("合格");
} else {
println("不合格");
}
return 0;
}
int main() {
// 基本的なforループ
for (int i = 0; i < 10; i++) {
println(i);
}
// ネストしたループ
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
println(i, j);
}
}
return 0;
}
int main() {
int count = 0;
while (count < 5) {
println("Count:", count);
count++;
}
return 0;
}
int main() {
// break: ループを抜ける
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
println(i); // 0, 1, 2, 3, 4
}
// continue: 次の繰り返しへ
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
println(i); // 1, 3, 5, 7, 9
}
return 0;
}
int add(int a, int b) {
return a + b;
}
void greet(string name) {
println("Hello,", name, "!");
}
int main() {
int sum = add(10, 20);
println("Sum:", sum);
greet("World");
return 0;
}
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int result = factorial(5);
println("5! =", result); // 120
return 0;
}
void increment(int& ref) {
ref++;
}
int main() {
int value = 10;
increment(value);
println(value); // 11
return 0;
}
int main() {
// 宣言と初期化
int[5] arr = [10, 20, 30, 40, 50];
// アクセス
println(arr[0]); // 10
arr[2] = 100;
println(arr[2]); // 100
// ループでアクセス
for (int i = 0; i < 5; i++) {
println(arr[i]);
}
return 0;
}
int main() {
// 2次元配列
int[3][3] matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
// アクセス
println(matrix[1][1]); // 5
// ネストループ
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
print("%d ", matrix[i][j]);
}
println("");
}
return 0;
}
int main() {
int[5] arr = [1, 2, 3, 4, 5];
int* ptr = &arr[0];
// ポインタ演算
println(*ptr); // 1
println(*(ptr+1)); // 2
println(*(ptr+2)); // 3
return 0;
}
struct Point {
int x;
int y;
};
int main() {
Point p;
p.x = 10;
p.y = 20;
println("Point:", p.x, p.y);
return 0;
}
struct Address {
string city;
int zip;
};
struct Person {
string name;
int age;
Address addr;
};
int main() {
Person person;
person.name = "Alice";
person.age = 30;
person.addr.city = "Tokyo";
person.addr.zip = 1000001;
println(person.name, "lives in", person.addr.city);
return 0;
}
struct Point {
int x;
int y;
};
int main() {
Point[3] points;
points[0].x = 0;
points[0].y = 0;
points[1].x = 10;
points[1].y = 20;
points[2].x = 30;
points[2].y = 40;
for (int i = 0; i < 3; i++) {
println("Point", i, ":", points[i].x, points[i].y);
}
return 0;
}
int main() {
int value = 42;
int* ptr = &value; // アドレス取得
println("Value:", value); // 42
println("Address:", ptr); // 0x...
println("Deref:", *ptr); // 42
*ptr = 100; // ポインタ経由で変更
println("Value:", value); // 100
return 0;
}
int main() {
int[5] arr = [10, 20, 30, 40, 50];
int* ptr = &arr[0];
println(*ptr); // 10
ptr++; // 次の要素へ
println(*ptr); // 20
ptr = ptr + 2; // 2つ進む
println(*ptr); // 40
return 0;
}
struct Point {
int x;
int y;
};
int main() {
Point p;
p.x = 10;
p.y = 20;
Point* ptr = &p;
// デリファレンス構文
(*ptr).x = 30;
// アロー演算子(簡潔)
ptr->y = 40;
println(p.x, p.y); // 30 40
return 0;
}
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
int main() {
// 関数ポインタの宣言(引数の型は指定しない)
int* op = &add;
// 呼び出し(2つの形式)
int result1 = (*op)(5, 3); // 明示的デリファレンス
int result2 = op(5, 3); // 暗黙的呼び出し
println(result1); // 8
// 再代入
op = &multiply;
int result3 = op(5, 3);
println(result3); // 15
return 0;
}
interface Printable {
void print();
};
struct Message {
string text;
};
impl Printable for Message {
void print() {
println("Message:", self.text);
}
};
int main() {
Message msg;
msg.text = "Hello";
msg.print(); // Message: Hello
return 0;
}
interface Shape {
int area();
};
struct Rectangle {
int width;
int height;
};
struct Circle {
int radius;
};
impl Shape for Rectangle {
int area() {
return self.width * self.height;
}
};
impl Shape for Circle {
int area() {
return 3 * self.radius * self.radius;
}
};
int main() {
Rectangle rect;
rect.width = 10;
rect.height = 5;
Circle circle;
circle.radius = 7;
println("Rectangle area:", rect.area()); // 50
println("Circle area:", circle.area()); // 147
return 0;
}
// ❌ 間違い
int x = 10
// ✅ 正しい
int x = 10;
// ❌ 間違い
struct Point {
int x;
int y;
}
// ✅ 正しい
struct Point {
int x;
int y;
};
// ❌ 実行時エラー
int[5] arr = [1, 2, 3, 4, 5];
int x = arr[10]; // エラー: 境界外アクセス
// ✅ 正しい
int x = arr[4]; // 最後の要素
// ❌ コンパイルエラー
const int MAX = 100;
MAX = 200; // エラー: constは変更できない
// ✅ 正しい
int max = 100;
max = 200; // OK
// ❌ 値が不定
int x;
println(x); // 未初期化
// ✅ 正しい
int x = 0;
println(x); // 0
// ❌ 戻り値がない
int getValue() {
int x = 42;
// return忘れ
}
// ✅ 正しい
int getValue() {
int x = 42;
return x;
}
// ❌ nullポインタ参照
int* ptr = nullptr;
int x = *ptr; // エラー
// ✅ 正しい
int* ptr = nullptr;
if (ptr != nullptr) {
int x = *ptr;
}
このガイドでは、Cb言語の基本的な構文を学びました。
Happy Coding! 🎉