アドレス演算　C言語

C言語を習得する３つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b

C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1
# 目的(purpose)
　この資料の目的は、国際規格・日本工業規格の内容の理解ではなく、
処理系の振る舞いを理解し、結果としてプログラマの意図通りに、
作ったプログラムが動作するかどうかの確からしさを向上させることにある。
 
 <この項は書きかけです。順次追記します。>
# 成果(outcome)
　複数のプログラムを複数の処理系で処理することにより、
プログラマの意図が、特定の処理系の範囲内での実現を目指しているか、
複数の処理系で動作する可搬性を目指しているかの区分を明確にできること。

　特定の処理系の範囲内での実現を目指したプログラムを、
誤って別の処理系で翻訳して、プログラマの意図しない動作をさせないこと。

任意のデータ（意図しないデータを含む）に対する処理が、プログラマの意図した範囲に収めることができるかどうかを確かめること。

## 前提(assumption)
C言語のソースコードは、複数の処理系でコンパイルし、実行して、その実行結果を含めて検討する。

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

「Cプログラミングの落とし穴」では、危ないプログラム例、その断片を示している。
「C Puzzle Book」では、コンパイルして実行し出力した結果で比較をしている。
差は、頭の中で仮想的に考えていることが、出力までの間にどう変わっているか、最後まで確認できるかどうか。

### [C][C++]の国際規格案の例題を
コンパイルするときの課題７つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

### どうやって MISRA Example Suiteを
コンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00
MISRA C まとめ #include 
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9
MISRA C.2.1 Type widening in integer promotion,(wicm3.c )
https://qiita.com/kaizen_nagoya/items/6a24db5d51efae358cfb
MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74
MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb
#### コンパイル用shell script C版
(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
#### CERT C入門(1) Rule 01. 
Preprocessor (PRE)
https://qiita.com/kaizen_nagoya/items/8d2cb4158ed53d5a0a28

#### CERT C入門(2) Rule 02. 
Declarations and Initialization (DCL)
https://qiita.com/kaizen_nagoya/items/8db2bf294bb66344d6df#_reference-52026d66c61fb88415c7

#### CERT C++入門(1) Rule 01. 
Declarations and Initialization (DCL)
https://qiita.com/kaizen_nagoya/items/61b3c431756fe8e6af3e

# 本文
関係演算子と等価演算子
https://qiita.com/yz2cm/items/6bd80e3409ac49e57b09
から引用させていただきます。

```c:正しいコード（C90）
int n;
&n > &n+1;    /* 正しい：関係演算子・等価演算子では、配列型以外へのポインタは「長さ1の配列」として考える */
```

「関係演算子と等価演算子」の話題ではないように見受けられる。
アドレス演算とその演算結果の比較。

アドレスを+1する演算があるのは、デバイスドライバか、OSかもしれない。

上のコードの断片を意味のある出力にするまでを試して、何の演算をしているかを確かめる。

# 機材・処理系
## 機材
### CPU: intel core i5
アドレス値は8bit毎。32bitの変数値が入っていると、次の変数のアドレスは４先。

16/32/64bit毎にアドレスがついているCPU/Memoryがあるかどうか未調査。

### OS:macOS 10.13.3

### ASLR(
Address Space Layout Randomization)
https://pax.grsecurity.net/docs/aslr.txt

"macOS brings ASLR to the memory used by the kernel at the heart of the operating system, so the same defences work at every level in your Mac."
https://www.apple.com/in/macos/security/

下記出力上の値が毎回変わる。
注目しているのは演算による差。例えば、１か４か。

#### 課題
ASLR に関するPax Teamの更新がない。
https://pax.grsecurity.net

Linux Standard Base等OSの標準にASLRの記述が見当たっていない。
https://refspecs.linuxfoundation.org/lsb.shtml

##### 備忘録
OSによるメモリ保護、データの暗号化、抽象データ型による隠蔽とASLR技術との関係を示す資料が見つけれていない。

80286以降のメモリ管理機能が理解できず、コンパイラの記述から30年近く離れており現状に追いつけていない。

#### ASLR on Qiita
ASLRとKASLRの概要
https://qiita.com/satoru_takeuchi/items/5c80c4e255e21c5b4b8a

katagaitai CTF勉強会の宿題
https://qiita.com/kusano_k/items/ce48945f9ee8763edd1c

C++のメモリーの話とストレージの有効期間の話をしようか
https://qiita.com/yumetodo/items/067b2db266ae0779f030

Linux: mallocで返されるアドレスを固定する
https://qiita.com/aosho235/items/852d88518f1709741d30

## 処理系

```bash
$ clang --version
clang version 6.0.0 (tags/RELEASE_600/final)
Target: x86_64-apple-darwin17.4.0
Thread model: posix InstalledDir: /usr/local/opt/llvm/bin
$ gcc-7 --version
gcc-7 (Homebrew GCC 7.3.0_1) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  
There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

# shell script

```sh:vc.sh
#!/bin/sh
echo "clang $1.c"
cc $1.c -o $1l
./$1l $2
echo "gcc-7 $1.c"
gcc-7 $1.c -o $1g
./$1g $2
```
## 例1

```c:ad.c
#include <stdio.h>
int main(void)
{
    int n;
    return  printf("%d, %d, %d, %d , %d\n",&n>&n+1 ,&n,&n+1, &n - &n+1, &n - (&n +1) );
}
```
### clang: warning

```
warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
```
### gcc-7: no warning
### 実行結果

```
clang
0, -510875512, -510875508, 1 , -1
gcc-7 
0, -367966068, -367966064, 1 , -1
```
## 例2

```ad2.c
#include <stdio.h>
int main(void)
{
    int n;
    return  printf("%d, %d, %d, %d , %d\n",&n>&n+1 ,(int)&n,(int) (&n+1), (int)&n - (int)(&n+1), (int)&n - ((int)&n +1) );
}
```
### 2.1 clang: no warning
### 2.2 gcc-7: warning

```
 warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
```
### 実行結果

```bash
clang
0, -486606720, -486606716, -4 , -1
gcc-7
0, -466122612, -466122608, -4 , -1
```

## 例3

```c:ad3.c
#include <stdio.h>
int main(void)
{
    int n;
    return  printf("%d, %ld, %ld, %ld, %ld \n",&n>&n+1 ,(long)&n,(long) (&n+1), (long)&n - (long)(&n+1), (long)&n - (long)&n +1 );
}
```

### clang: no warning 
### gcc: no warning

### 実行結果

```
clang
0, 140732820863112, 140732820863116, -4, 1 
gcc-7
0, 140732788951180, 140732788951184, -4, 1 
```

## 例4

```c:ad4.c
#include <stdio.h>
int main(void)
{
    int n;
    return  printf("%d, %ld, %ld, %ld, %ld \n",&n>&n+1 ,(long)&n,(long) (&n+1), (long)&n - (long)(&n+1), (long)&n - ((long)&n +1) );
}
```
### clang: no warning 
### gcc: no warning


### 実行結果

```
clang
0, 140732749990024, 140732749990028, -4, -1
gcc-7
0, 140732836776076, 140732836776080, -4, -1 
```

# まとめ

## 1 処理系により警告が出る場合が違う。
gccとclangの設計思想をまだ把握できていません。

### 1.1  アドレス変数、アドレス演算結果のキャストへの警告が違う

## 2 アドレス演算の結果の値は処理系、処理の記述の少しの変化で異なる。

### 2.1 インテル系のCPUでのアドレスは「+1」すると、整数に変換すると4の差になる。



## 3 アドレス演算は（）のつけ方によってアドレス演算か整数演算かの範囲が変わなる
　アドレス演算の場合には「＋１」でインテル系のCPUでは整数にすると差が４、整数演算の場合には差が１。

# 実行プログラムの大きさ
macOS 10.13.3

上記ソースを、上記スクリプトにかけた結果。全てが同じ大きさ。末尾lがclang/llvm, gがgcc。

   8432  3 25 21:13 ad2g
   8432  3 25 21:13 ad2l
   8432  3 25 21:26 ad3g
   8432  3 25 21:26 ad3l
   8432  3 25 21:25 ad4g
   8432  3 25 21:25 ad4l
   8432  3 25 21:04 ad5g
   8432  3 25 21:04 ad5l
   8432  3 25 21:30 adg
   8432  3 25 21:30 adl

# 参考文献(reference)

C2011コンパイル一覧@researchmap
https://researchmap.jp/jownvh0ye-1797580/#_1797580

[C][C++]の国際規格案の例題をコンパイルするときの課題７つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

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

MISRA C まとめ #include <misra_c.h>
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00

MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb


# 関連資料
' @kazuo_reve 私が効果を確認した「小川メソッド」
https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da

' @kazuo_reve 新人の方によく展開している有益な情報
https://qiita.com/kazuo_reve/items/d1a3f0ee48e24bba38f1

' @kazuo_reve Vモデルについて勘違いしていたと思ったこと
https://qiita.com/kazuo_reve/items/46fddb094563bd9b2e1e
## 自己記事一覧
Qiitaで逆リンクを表示しなくなったような気がする。時々、スマフォで表示するとあらわっることがあり、完全に削除したのではなさそう。

４月以降、せっせとリンクリストを作り、統計を取って確率を説明しようとしている。
2025年２月末を目標にしている。

Qiitaの記事に３段階または５段階で到達するための方法
https://qiita.com/kaizen_nagoya/items/6e9298296852325adc5e

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

逆も真：社会人が最初に確かめるとよいこと。OSEK(69)、Ethernet(59)
https://qiita.com/kaizen_nagoya/items/39afe4a728a31b903ddc

「何を」よりも「誰を」。１０年後のために今見習いたい人たち
https://qiita.com/kaizen_nagoya/items/8045978b16eb49d572b2

物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

量子(0) 計算機, 量子力学 
https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

図(0) state, sequence and timing. UML and お絵描き 
https://qiita.com/kaizen_nagoya/items/60440a882146aeee9e8f

品質一覧 
https://qiita.com/kaizen_nagoya/items/2b99b8e9db6d94b2e971

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

仮説（0）一覧（目標100現在40）
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

音楽　一覧(0) 
https://qiita.com/kaizen_nagoya/items/b6e5f42bbfe3bbe40f5d

「@kazuo_reve 新人の方によく展開している有益な情報」確認一覧 
https://qiita.com/kaizen_nagoya/items/b9380888d1e5a042646b

Qiita(0)Qiita関連記事一覧（自分）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

鉄道（０）鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/26bda595f341a27901a0

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding(0) Rules, C, Secure, MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

coding (101) 一覧を作成し始めた。omake:最近のQiitaで表示しない5つの事象
https://qiita.com/kaizen_nagoya/items/20667f09f19598aedb68

プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

Python(0)記事をまとめたい。
https://qiita.com/kaizen_nagoya/items/088c57d70ab6904ebb53

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

「はじめての」シリーズ　 ベクタージャパン　
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb

AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

LaTeX(0) 一覧　
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

100以上いいねをいただいた記事16選
https://qiita.com/kaizen_nagoya/items/f8d958d9084ffbd15d2a

小川清最終講義、最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53
# 参考資料
物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

OSEK 記事で views 100,000を目指して　OSEK(8)
https://qiita.com/kaizen_nagoya/items/ff45ee55566eeff5f62e

無線網（Wi-Fi）空中線(antenna)(0) 記事https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

なぜdockerで機械学習するか 書籍・ソース一覧作成中 
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

仮説（0）一覧
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

LaTeX(0) 一覧　
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

小川清最終講義、小川清最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
### 文書履歴
ver, 0.10 初稿　20180325
ver, 0.11 目的、成果、実行プログラムの大きさ、参考文献追記 20180326
ver, 0.12 @SaitoAtsushi さんからのご意見をいただきASLRの項追記 20180328
ver. 0.24 ありがとう追記　20230513
## 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.