storage class 4: file, The C Puzzle book

職業訓練
https://qiita.com/kaizen_nagoya/items/95368b63fa21d64271ec

Programmer, Day 6
https://qiita.com/kaizen_nagoya/items/632d8f191268e88eb86a

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識, error(21), coding(28)
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

The C Puzzle Book
https://efrei.poupa.net/Programmation%20en%20C/Cours/The_C_Puzzle_Book.pdf

defs.h "The C Puzzle Book"
https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9

```c:sf4.c
#include "defs.h"
int i=1;
int main(void)
{
        auto int i, j;
        i = reset();
        for( j=1; j<=3; j++){
                PRINT2(d,i,j);
                PRINT1(d, next(i));
                PRINT1(d, last(i));
                PRINT1(d,new(i+j));
        }
}
```
```c:sc4-1.c
static int i=10;
int next(int j){
        return(i+=1);
}

int last(int j){
        return (i-=1);
}
```
```c:sc4-2.c
extern int i;
int reset(void){
        return (i);
}
```
```shell-session:bash

$ gcc sc4.c sc4-1.c sc4-2.c
sc4.c: In function ‘main’:
sc4.c:6:13: warning: implicit declaration of function ‘reset’ [-Wimplicit-function-declaration]
    6 |         i = reset();
      |             ^~~~~
In file included from sc4.c:1:
sc4.c:9:27: warning: implicit declaration of function ‘next’ [-Wimplicit-function-declaration]
    9 |                 PRINT1(d, next(i));
      |                           ^~~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:9:17: note: in expansion of macro ‘PRINT1’
    9 |                 PRINT1(d, next(i));
      |                 ^~~~~~
sc4.c:10:27: warning: implicit declaration of function ‘last’ [-Wimplicit-function-declaration]
   10 |                 PRINT1(d, last(i));
      |                           ^~~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:10:17: note: in expansion of macro ‘PRINT1’
   10 |                 PRINT1(d, last(i));
      |                 ^~~~~~
sc4.c:11:26: warning: implicit declaration of function ‘new’ [-Wimplicit-function-declaration]
   11 |                 PRINT1(d,new(i+j));
      |                          ^~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:11:17: note: in expansion of macro ‘PRINT1’
   11 |                 PRINT1(d,new(i+j));
      |                 ^~~~~~
/usr/bin/ld: /tmp/ccuuLhkh.o: in function `main':
sc4.c:(.text+0xcf): undefined reference to `new'
collect2: error: ld returned 1 exit status
```

```c:sc4a.c
#include "defs.h"
int i=1;
int main(void)
{
        auto int i, j;
        i = reset();
        for( j=1; j<=3; j++){
                PRINT2(d,i,j);
                PRINT1(d, next(i));
                PRINT1(d, last(i));
                PRINT1(d,new(i+j));
        }
        return EXIT_SUCCESS;
}

```
```c:ps4-1a.c
static int i=10;
int next(int j){
        return(i+=1);
}

int last(int j){
        return (i-=1);
}

int new(int i){
        static int j=5;
        return (i=j+=i);
}
```
```shell-session:bash
$ gcc sc4.c sc4-1.c sc4-2.c
sc4.c: In function ‘main’:
sc4.c:6:13: warning: implicit declaration of function ‘reset’ [-Wimplicit-function-declaration]
    6 |         i = reset();
      |             ^~~~~
In file included from sc4.c:1:
sc4.c:9:27: warning: implicit declaration of function ‘next’ [-Wimplicit-function-declaration]
    9 |                 PRINT1(d, next(i));
      |                           ^~~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:9:17: note: in expansion of macro ‘PRINT1’
    9 |                 PRINT1(d, next(i));
      |                 ^~~~~~
sc4.c:10:27: warning: implicit declaration of function ‘last’ [-Wimplicit-function-declaration]
   10 |                 PRINT1(d, last(i));
      |                           ^~~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:10:17: note: in expansion of macro ‘PRINT1’
   10 |                 PRINT1(d, last(i));
      |                 ^~~~~~
sc4.c:11:26: warning: implicit declaration of function ‘new’ [-Wimplicit-function-declaration]
   11 |                 PRINT1(d,new(i+j));
      |                          ^~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:11:17: note: in expansion of macro ‘PRINT1’
   11 |                 PRINT1(d,new(i+j));
      |                 ^~~~~~
inst19@teachB:~$ vi sc4-2.c
inst19@teachB:~$ gcc sc4.c sc4-1.c sc4-2.c
sc4.c: In function ‘main’:
sc4.c:6:13: warning: implicit declaration of function ‘reset’ [-Wimplicit-function-declaration]
    6 |         i = reset();
      |             ^~~~~
In file included from sc4.c:1:
sc4.c:9:27: warning: implicit declaration of function ‘next’ [-Wimplicit-function-declaration]
    9 |                 PRINT1(d, next(i));
      |                           ^~~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:9:17: note: in expansion of macro ‘PRINT1’
    9 |                 PRINT1(d, next(i));
      |                 ^~~~~~
sc4.c:10:27: warning: implicit declaration of function ‘last’ [-Wimplicit-function-declaration]
   10 |                 PRINT1(d, last(i));
      |                           ^~~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:10:17: note: in expansion of macro ‘PRINT1’
   10 |                 PRINT1(d, last(i));
      |                 ^~~~~~
sc4.c:11:26: warning: implicit declaration of function ‘new’ [-Wimplicit-function-declaration]
   11 |                 PRINT1(d,new(i+j));
      |                          ^~~
defs.h:8:59: note: in definition of macro ‘PR’
    8 | #define PR(format, value) printf(#value" = %"#format"\t",(value))
      |                                                           ^~~~~
sc4.c:11:17: note: in expansion of macro ‘PRINT1’
   11 |                 PRINT1(d,new(i+j));
      |                 ^~~~~~
$ ./a.out
i = 1   j = 1
next(i) = 11
last(i) = 10
new(i+j) = 7
i = 1   j = 2
next(i) = 11
last(i) = 10
new(i+j) = 10
i = 1   j = 3
next(i) = 11
last(i) = 10
new(i+j) = 14
```