0087774ワット発電中さん
2021/05/01(土) 18:10:03.52ID:WlFJPGgItypedef と初めて接するのですが、分からないことがあります。
以下は、ネットにあったソースです。(作者さん、勝手に引用と改変すみません)
#include <stdio.h>
#include <stdlib.h>
typedef enum{
RUNNING = '1',
STOPPED = '2',
FAILED = '3',
HIBERNATING = '4'
} MACHINE_STATE; // (a)
int main(void) {
int input1;
MACHINE_STATE state; // (b)
// char state; // (c)
printf("type [1-4]: ");
input1 = getchar();
state = input1; // (d)
switch (state) {
case RUNNING: printf("running\n"); break;
case STOPPED: printf("stopped\n"); break;
case FAILED: printf("fail\n"); break;
case HIBERNATING: printf("hibernated\n"); break;
default: break;
}
while(1){}
}
typedef unsigned char UCHAR と書くと、以降のところで
UCHAR c; と書けば、unsigned char c; と同じ作用になると本などに書かれていました。まさにtypedefだと思います。
ところが上記のソースだと、typedef〜(a)までの間に、unsigned int とかの文字が書かれていません。
そして(b)で、MACHINE_STATE型でstsusという変数を取る、ということをしています。
ここまでの行でMACHINE_STATEが unsigned char なのか、intなのか、型のことに触れていません。
1. この場合、MACHINE_STATE は、何型になるのでしょうか。
2. このようなtypedefの使用は、(c)のように普通に取るのと比べて、どういうメリットがあるのでしょうか。
3. また、(d)の点で、input1を あえてstatusに入れ直していますが、これは、なぜなのでしょうか。
宜しくお願いします。