C/C++ auto

gcc や Clang でのビルド方法ページを作っている筆者ですが。
ちょっと、いや数年サボっていたら C 23 や C++ 20 が出ていた。
流石に情報が古いので書き換えしようかと、てか調べないと。

C23 (C言語) – Wikipedia

ついに C 言語にも auto キーワードが、今頃知った。
いや C++ の柔軟な奴と違って変数宣言にしか使えないっぽい。
やってみないと断言できないので少し使ってみる。

#include <stdio.h>
#include <stdlib.h> // free
#include <string.h> // strdup

/**
 * gcc -std=c23 c23.c
 * clang -std=c23 c23.c
 */
int calc(int n) {
    return n * n;
}

int
main (int argc, char *argv[]) {
  
    // 静的文字列はイケる
    auto om = "OLYMPUS"  " " "Workspace";
    printf ("%s\n", om);
    // ポインタもイケる
    auto heap = strdup("おならプー");
    printf ("%s\n", heap);
    free(heap);
    // 計算値もイケる
    auto num = 3*5;
    printf ("%d\n", num);
    // 再代入も普通に可能
    num = 30;
    printf ("%d\n", num);
    // 関数の戻り値dでも可能
    auto num2 = calc(8);
    printf ("%d\n", num2);
    // ループがちょっとだけ簡易にできる
    char *l_mount[] = {"Leica", "Panasonic", "SIGMA"};
    auto count = sizeof (l_mount) / sizeof (l_mount[0]);
    for (auto i=0; i<count; i++) {
        printf ("%s\n", l_mount[i]);
    }
    // 配列自体は無理
    //auto num_array = {1, 2, 3};
    return 0;
}

gcc

配列もダメか、あんまり便利じゃないてかコレ意味あるの?
とにかく -std=c23 又は -std=c2x 指定はどちらでも使えました。

#include <iostream>

/**
 * Fedora 42 は普通にイケました
 * g++ -std=c++20 c23.cc
 * 
 * macOS ではエラーになったので、場所指定は人によって違うと思う
 * clang++ -I /Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk/usr/include/c++/v1 -std=c++20 c23.cc
 */

auto
get_half(auto num) {
    return num / 2;
}
 
int
main (int argc, char *argv[]) {
  
    //char *l_mount[] = {"Leica", "Panasonic", "SIGMA"};
    auto l_mount = {"Leica", "Panasonic", "SIGMA"};

    for (auto obj : l_mount) {
        std::cout << obj << std::endl;
    }
    // 簡易オーバーロード
    std::cout << get_half(3) << std::endl;
    std::cout << get_half(3.0) << std::endl;

    return 0;
}

clang

C++ の auto はまさかのこんなことまで可能なのにね。
おまえは Python か、偽オーバーロードの中身はどうなっているのやら。
C++ でも stdio な某クソ OS はどうでもいいよね。

それより Clang が iostream を見つけてくれないんですけど。
macOS だけでなく Linux 版も同じみたいだけどバグなのか?
-I で場所指定すれば通るけどもっといい方法がありそうな。

コサメビタキ

2025 年のゴールデンウイークも終わってしまいました。
でも筆者は色々あって今日は休日です、久々に平日の公園へ。

kogera

せっかくの静かな公園なのに午前中の成果はこのコゲラだけ。
オオルリやキビタキはもう今年の嫁を見つけてしまったのだろうか。

tsutsudori

午後になりツツドリを見つけたので撮っていたらコサメビタキが。
ビックリして威嚇している面白い構図が撮れました。

enaga

今度はエナガが、なんか昼から急に野鳥の出が良くなったぞ。
聞き覚えのない鳴き声な凄く小さな鳥もいる、腹が減ったのに。

kosamebitaki

コサメビタキがまた、あの鳴き声はおまえだったのか?
実は五月にコサメを見つけたのは初、秋は簡単に見つかるのに。

sansyoukui

遠いけどメジロやエナガ等が入れ替わりで現れて飯を食いにいけない。
サンショウクイも何度か現れたので一番近くで撮れた奴を。

yamagara

ヤマガラ、この時期に見つけるとキビタキかとつい勘違いするよね。
空腹が限界なので今日はここまで。
弁当持参も考えるけど荷物になるのがねぇ。

キビタキ

今日は曇り気味だけどキビタキを求めて小牧の某公園へ。
マイクロフォーサーズの高 ISO | Paepoi Blog
昨年は塗り絵でしたからね、今年こそ撮りたいんです。
-2EV で撮影し RAW 現像で戻す技にも慣れたしリベンジだ。

tsutsudori

ツツドリ、-2EV で撮影し「なんだヒヨドリか」と思ったさ。
帰宅して確認したらツツドリでびっくり、消さないで良かった。

sansyoukui

キビタキが鳴き出した、毎度のことだけど姿は見えず。
なんか動いたので撮影したらサンショウクイでラッキー。

kibitaki

同席したお姉様が手招きしてくれてなんとか発見。
後は協力して追いかける、野鳥好きはみんないい人。

kibitaki

なんで見つからないんだろうね、大声で囀りしているのに。
メスを探しているはずだけどメスを見たことがない筆者である。

kibitaki

もう少し近くで撮れた、今回は随分長く留まっているな。
しかし -2EV してなきゃまた全部塗り絵だっただろうなと。

kibitaki

もっと近くに来た、こんなに近いの初めてですよ。
以後飛んでいったのでおしまい、目標達成で世は満足じゃ。

ootsurubo

おまけ、「オオツルボです」という張り紙とともにありました。
実際に綺麗なのに驚いて筆者もチャリを止めたもんな。
大山川の道端にポツンとあったけど自生かどうかワカンネ。

ササゴイ

ゴールデンウイークです、夏鳥本番です。
今日は近場のスポットを手当たり次第に回ってみる。

kuroageha

ツツジにクロアゲハ、いやぁ春ですね。
この近場にてキビタキが鳴いていたけど姿は見えずでした。

sasagoi

夏鳥のササゴイがコイらしきお魚をゲットしたようです。
やっぱり新鮮な魚っておいしいですよね。

kiji

キジがお花畑で戯れています。
多分彼はこれで身を隠せていると思っているのでしょうけど。

mozu

モズ君はヤモリらしきトカゲをゲットしたようです。
やっぱり新鮮な爬虫類っておいしい、のかな。

セッカのリベンジにも行ったけど今日も全然寄れず。
夏鳥本番と言いながらササゴイだけか、明日こそ。

セッカ

今日も快晴、キビタキを求めて小牧の某公園へ。
幸せ家族がいっぱいです、いやこんなじゃ野鳥こねーよ。
キビタキは諦めて河原周辺を。

keri

ケリの幼鳥、早くも産まれている子がいるようで。
隣の親鳥が威嚇でやかましいので撮影後すぐ退散。

suzume

スズメの体が痒かったのか凄い勢いでズリズリしてた。
別の生き物にしか見えないのが撮れたのでたまには。

ooyosikiri

オオヨシキリ、冠も立ってないし全然そう見えないけど。
でもあのカエルみたいな囀りしているんだから間違いない。

sekka

セッカ、全然寄れずギリギリセッカと解るこれが精一杯。
一生懸命な囀りでもツバメの地鳴きより小さな声ですね。

クロスバイクで気軽に行ける範囲で主に野鳥を撮影。
という趣旨でやっているけど新たな野鳥がまた見つかった。
図鑑作りとか画質に拘るとか写真の楽しみ方も色々あるけど。
次は何が見つかるかと考えるとこの趣旨はやめられません。