2024年12月19日木曜日

C言語③ 構造体・プリプロセッサ・デバッグ

 構造体
オンライン開発環境【paiza.io】にサンプルプログラムを入力・実行しながら確認しました。
#include <stdio.h>

struct  member{
        char *name;
        int age;
}taro , hanako;
int main() {
        struct member jiro;//次郎追加
        taro.name = "太郎";
        taro.age = 50;
        hanako.name = "花子";
        hanako.age = 40;
        jiro.name = "次郎";
        jiro.age = 30;
        printf("名前\t年齢\n");
        printf("%s\t%d\n" , taro.name , taro.age);
        printf("%s\t%d\n" , hanako.name , hanako.age);
        printf("%s\t%d\n" , jiro.name , jiro.age);
        return 0;
}


配列型構造体変数
#include <stdio.h>

struct member  {
        char *name;
        int age;
};
int main() {
struct member ary[3];
ary[0].name = "太郎";
ary[0].age = 50;
ary[1].name = "花子";
ary[1].age = 40;
ary[2].name = "次郎";
ary[2].age = 30;
int ary_num = 1;
if ((ary_num >= 0) && (ary_num <= 2)) {
printf("名前\t年齢\n");
printf("%s\t%d" , ary[ary_num].name , ary[ary_num].age);
}
else printf("エラー");
return 0;
}




構造体変数コピー

#include <stdio.h>

struct copy {
        char *str;
        int var1;
        double var2;
}st_var1;
int main() {
        st_var1.str = "abcdef";
        st_var1.var1 = 1000;
        st_var1.var2 = 1.23456;
        struct copy st_var2;//var2追加
        st_var2 = st_var1; //var2にコピー
        printf("str  = %s\n" , st_var2.str);
        printf("var1 = %d\n" , st_var2.var1);
        printf("var2 = %g" , st_var2.var2);
        return 0;
}



構造体変数と関数
#include <stdio.h>

struct  member{
        char *name;
        int age;
}taro , hanako;
void func(char *);
int main() {
        struct member jiro;//次郎追加
        taro.name = "太郎";
        taro.age = 50;
        hanako.name = "花子";
        hanako.age = 40;
        jiro.name = "次郎";
        jiro.age = 30;
        func(hanako.name);
        return 0;
}
void func(char *name) {
printf("%s",name);
}









#include <stdio.h>

struct  member{
        char *name;
        int age;
}taro , hanako;
void func(struct member);
struct member member (char * , int);
int main() {
        struct member jiro;//次郎追加
        taro.name = "太郎";
        taro.age = 50;
        hanako.name = "花子";
        hanako.age = 40;
        jiro.name = "次郎";
        jiro.age = 30;
        printf("名前\t年齢\n");
    func(taro);
    func(hanako);
    func(jiro);
        return 0;
}
void func(struct member hito ) {
printf("%s\t%d\n", hito.name , hito.age);
}
struct member member (char *name , int age) {
struct member hito;
hito.name = name;
hito.age = age;

return hito;
}











#include <stdio.h>

struct  member{
        char *name;
        int age;
}taro , hanako;
void func(struct member);
struct member member (char * , int);
int main() {
        struct member jiro;//次郎追加
        taro  = member("太郎" ,50);
        hanako = member("花子" ,40);
        jiro = member("次郎" ,30);
        printf("名前\t年齢\n");
    func(taro);
    func(hanako);
    func(jiro);
        return 0;
}
void func(struct member hito ) {
printf("%s\t%d\n", hito.name , hito.age);
}
struct member member (char *name , int age) {
struct member hito;
hito.name = name;
hito.age = age;

return hito;
}














#include <stdio.h>
// 構造体
struct person1 {
    char *name;
    char sex;
    int age;
    char *add;
    char *job;
};
// 構造体
typedef struct person {
    char *name;
    char sex;
    int age;
    char *add;
    char *job;
} person2;
// 一括代入用の関数
person2 init(char *name, char sex, int age, char *add, char* job) {
    person2 p2;
    p2.name = name;
    p2.sex = sex;
    p2.age = age;
    p2.add = add;
    p2.job = job;
    return p2;
}
int main(void) {
    // 構造体の実体を生成
    struct person1 tanaka;
    tanaka.name = "T.Tanaka";
    tanaka.sex = 'm';
    tanaka.age = 30;
    tanaka.add = "Tokyo";
    tanaka.job = "teacher";
    printf("%sは%d歳で、%sで%sをしています\n", tanaka.name, tanaka.age, tanaka.add, tanaka.job);
    // 構造体の実体の生成と一括初期化
    person2 sato = {"S.Sato", 'f', 25, "Osaka", "nurse"};
    /* error: expected expression before '{' token sato = {"S.Sato", 'f', 25, "Osaka", "nurse"};*/
    printf("%sは%d歳で、%sで%sをしています\n", sato.name, sato.age, sato.add, sato.job);
    // 関数で一括代入
    sato = init("K.Sato", 'm', 35, "Nagoya", "doctor");
    printf("%sは%d歳で、%sで%sをしています\n", sato.name, sato.age, sato.add, sato.job);
    return 0;
}




構造体ポインタ アロー演算子 ( -> )

#include <stdio.h>

struct {
        int var;
}obj , *po;
int main() {
        po = &obj;
        obj.var = 100;
        printf("%d" , po->var);
        return 0;
}







#include <stdio.h>

struct member {
char *name;
int age;
};
struct member member(char * , int);
void write(struct member *);
int main() {
struct member taro = member("taro", 50);
struct member hanako = member("hanako" , 40);
printf("名前\t年齢\n");
write(&taro);
write(&hanako);
return 0;
}
struct member member(char name[] , int age) {
struct member obj;
obj.name = name;
obj.age = age;
return obj;
}
void write(struct member *obj) {
printf("%s\t%d\n" , obj->name , obj->age);
}







#define マクロ名 文字列(マクロ名 大文字)
#include <stdio.h>
#define SATO "sato jiro"

int main() {
        printf(" %s" , SATO);
        return 0;
}











#include <stdio.h>
#define MAX 3

int main() {
        int ary[MAX] , count;
        for (count = 0 ; count < MAX ; count++) {
                #define KAZU 1
                ary[count] = KAZU + count;
                printf("%d " , ary[count]);
        }
        return 0;
}








#undef マクロ名(マクロ名を未定義)
#include <stdio.h>
#define JIRO "jiro"

int main() {
        #ifdef JIRO
                printf(JIRO);
        #endif
        #undef JIRO
        #ifdef JIRO
                printf(JIRO);
        #else
                printf(" sato");
        #endif
        return 0;
}













#define マクロ名(引数リスト) 処理
#include <stdio.h>
#define ADD(a , b) ((a) + (b))

int main() {
        int c;
        c = ADD(2 * 3 , 4 / 2);
        printf("%d" , c);
        return 0;
}












組み込みマクロ

#include <stdio.h>

int main() {
        printf("LINE = %d\n" , __LINE__);
        printf("FILE = %s\n" , __FILE__);
        printf("DATE = %s\n" , __DATE__);
        printf("TIME = %s\n" , __TIME__);
        return 0;
}
















条件コンパイル
#include <stdio.h>
#define DEBUG 1

int main() {
        #if DEBUG
                printf("1:真\n");
        #else
                printf("0:偽\n");
        #endif
        printf("CLOW CARD");
        return 0;
}









0 件のコメント:

コメントを投稿

M5Stack用MIDI音源ユニット(SAM2695) → XIAO MIDI シンセサイザー スケッチ例

 M5Stack用MIDI音源ユニット(SAM2695)にXIAO ESP32C3制御  XIAO MIDI シンセサイザーSeeed_Arduino_MIDI Master-mainライブラリーによるスケッチ例(StateMachine)の音を出してみました。   動画