MISRA C.2.1 Type widening in integer promotion,(wicm3.c ) coding(34)

MISRA Cのコード断片をコンパイルして記録した。
https://researchmap.jp/joqmhv6vj-1797580/?lang=japanese

``` misra-c-2-1-ex-ui-wincm3.c
// 1. filename:	misra-C-2-1-ex-ui-wicm3.c 
//	        misra-C-2-1-ex-ui-wcm2.c
//		misra-C-2-1-ex-ui-wcm.c
// 2. original examples and/or notes: from
// 		(c) MIRA Limited March, 2013 http://www.misra-c.com/
// 		MISRA C:2012
//  	MISRA C.2.1 Type widening in integer promotion, 
//		UI:uint32_t unsigned int, WICM:with initialization,cast, macro and something)
// 3. compile and output mechanism: by 
// 		(c) Ogawa Kiyoshi, January.04, 2014 http ://researchmap.jp/kaizen/MISRA-C/
//		@kaizen_nagoya, kaizen@gifu - u.ac.jp
// 4.compile errors and/or wornings: using
// 4.1.Xcode 5.0/LLVM version 4.2 (clang-425.0.27) (based on LLVM 3.2svn), C90/C99, 32/64 bit
// 		Target: x86_64-apple-darwin11.4.2 //Thread model: posix
//		(c) Apple https://developer.apple.com/xcode/
//			OSX 10.9.1 
// 		(c) LLVM 2003-2009 University of Illinois at Urbana-Champaign.
// 4.2. gcc-4.9 (GCC) 4.9.0 20131229 (experimental) C90/C99/C2011, 32/64 bit, http://gcc.gnu.org/onlinedocs/gcc/Standards.html
//      Copyright (C) 2013 Free Software Foundation, Inc. http://gcc.gnu.org/gcc-4.9/changes.html
// 4.3. Visual Studio Express 2013, most of C99/C11 that is a subset of ISO C++98/C++11.http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2089423-c99-support
//		(c) Microsoft http://www.visualstudio.com/
//			Windows 7, .NET Framework
// http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/
//			***********************************************************************/
// 			ConsoleApplication1.cpp : 
#include "stdafx.h"
//			If you are not use MS Windows, you may make stdfx.h like this 
// 			#ifndef _WIN32
// 			#define __stdafx_h__
// 			#define _NO_WIN32
// 			// http://social.msdn.microsoft.com/Forums/vstudio/en-US/88339ac0-678d-41d7-a421-519462087277/visual-studio-2008-wont-find-ifdef-win32?forum=vcgenera
// 			#endif //
//		(c) VMware, Inc.
//			VMWare fusion 6
// 4.4 M3T-NC30WA V.5.45 Release 01
//		(c) Renesas Electronics Corporation.http://www.renesas.com/products/mpumcu/m16c/
//			***********************************************************************/
//			*                                                                     */
//			*  FILE        :MISRAC_C_2_1.c                                        */
//			*  DATE        :Tue, Jan 07, 2014                                     */
//			*  	DESCRIPTION :main program file.                                    */
//			*  CPU GROUP   :10                                                    */
//			*                                                                     */
//			*  This file is generated by Renesas Project Generator (Ver.4.19).    */
//			*  NOTE:THIS IS A TYPICAL EXAMPLE.                                    */
// 5. Hardware:  MacBook Pro, 
//		(c) Intel http://ark.intel.com/products/37006/
//		Core 2 Duo 2.53GHz, 8GB, 1067MHz DDR3
// 6. Special Thanks: Upper organizatios and 
// 		NPO SESSAME project, http://www.sessame.jp/workinggroup/WorkingGroup3/
//		Toyo Corporation, http://www.toyo.co.jp/English/
//		ISO/IEC JTC1 SC22 WG14, http://www.open-std.org/jtc1/sc22/wg14/www/standards
//		Japan Standard Association, http://bit.ly/1lzykg1
//		NPO TOPPERS project, https://www.toppers.jp/asp-d-download.html
//		Daido Universcity, http://www.daido-it.ac.jp/gakubugakka/computer/index.html
//		WITZ Co.Ltd, http://www.witz-inc.co.jp/products/solution/solution.html
//		SevenWise.co. http://www.7ws.co.jp/index.html
//		TOYOTA Motor Corporation.http://toyota.jp/
#define __MISRA_C_C_2_1_
#include "misra_c.h"
#include <stdio.h>
#include <limits.h>

int main(void){
uint8_t ua = 200, ub =200 ;
uint16_t uc = 40000, ud = 30000;
uint32_t ue	= 2000000000, uf = 2000000000;
uint32_t ug = 2000000000, uh = 3000000000;
uint32_t ui = 4000000000, uj = 5000000000;
uint64_t uk = 9000000000000000000L, ul = 9446700000000000000L;
uint64_t um = 9100000000000000000L, un = 9446700000000000000L;
uint16_t uz=0;	
uint32_t uy=0;
uint64_t uv=0, uw=0, ux=0;
uint128_t uu=0, ut=0;
			PRSV();
	// LLVM 3.2 misra-C-2-1-ui-wc-wm2.c:71:61: error: use of undeclared identifier 'INT_MIN'
	printf("INT_MIN   = %d,     INT_MAX = %d UINT_MAX  = %u\n", INT_MIN, INT_MAX, UINT_MAX);
	printf("LONG_MIN   = %d,     LONG_MAX = %d ULONG_MAX  = %u\n", LONG_MIN, LONG_MAX, ULONG_MAX);
	printf("LLONG_MIN   = %20d,     LLONG_MAX = %20d ULLONG_MAX  = %20u\n", INT_MIN, INT_MAX, UINT_MAX);
	// uint8_t -> uint16_t;
	printf("integer promotion: 8bit\n");
	PRT(u,lu, ua, ub, uz, uint16_t);
	// uint16_t -> uint32_t	
	printf("16bit\n");
PRT(u,lu, uc, ud, uy, uint32_t);
// uint32_t -> uint64_t	
PRT(lu,llu, ue, uf, ux, uint64_t);
	//	cast
	printf("cast: 32bit\n");
PRT(lu,llu, ug, uh, uw, uint64_t);
	// overflow
	printf("truncation\n");
PRT(lu,llu, ui, uj, uv, uint64_t);
	// uint128
	printf("if any 64bit \n");
PRT(lu,llu, uk, ul,uu, uint128_t);

//printf("%" "u" " + %" "u" "= %" "u" ", %" "lu" "\n", ua, ub, ua + ub, uz); uz = ua + ub;printf("%" "u" " + %" "u" "= %" "u" ", %" "lu" "\n", ua, ub, ua + ub, uz); uz = (uint32_t) ua + ub;printf("%" "u"" + %" "u" " = %" "u" ", %" "lu" "\n", ua, ub, (uint32_t) ua + ub, uz);
//printf("%" "u" " + %" "u" "= %" "u" ", %" "lu" "\n", uc, ud, uc + ud, uy); uy = uc + ud;printf("%" "u" " + %" "u" "= %" "u" ", %" "lu" "\n", uc, ud, uc + ud, uy); uy = (uint32_t) uc + ud;printf("%" "u"" + %" "u" " = %" "u" ", %" "lu" "\n", uc, ud, (uint32_t) uc + ud, uy);
//printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "lu" "\n", ue, uf, ue + uf, ux); ux = ue + uf;printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "lu" "\n", ue, uf, ue + uf, ux); ux = (uint64_t) ue + uf;printf("%" "lu"" + %" "lu" " = %" "lu" ", %" "lu" "\n", ue, uf, (uint64_t) ue + uf, ux);
//printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "lu" "\n", ug, uh, ug + uh, uw); uw = ug + uh;printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "lu" "\n", ug, uh, ug + uh, uw); uw = (uint64_t) ug + uh;printf("%" "lu"" + %" "lu" " = %" "lu" ", %" "lu" "\n", ug, uh, (uint64_t) ug + uh, uw);
//printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "lu" "\n", ui, uj, ui + uj, uw); uw = ui + uj;printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "lu" "\n", ui, uj, ui + uj, uw); uw = (uint64_t) ui + uj;printf("%" "lu"" + %" "lu" " = %" "lu" ", %" "lu" "\n", ui, uj, (uint64_t) ui + uj, uw);
//printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "llu" "\n", uk, ul, uk + ul, uv); uv = uk + ul;printf("%" "lu" " + %" "lu" "= %" "lu" ", %" "llu" "\n", uk, ul, uk + ul, uv); uv = (uint128_t) uk + ul;printf("%" "lu"" + %" "lu" " = %" "lu" ", %" "llu" "\n", uk, ul, (uint128_t) uk + ul, uv);
PRT(lu,llu, um, un,ut, uint128_t);
printf("MISRA C.2.1 Type widening in integer promotion\n");
}
// 1, warning
// 1.1 LLVM 3.2
//misra-C-2-1-ui-wc-wm.c:64:33: warning: implicit conversion from 'long' to 'uint32_t' (aka 'unsigned int') changes value from 5000000000 to 705032704 [-Wconstant-conversion]
// uint32_t uh = 4000000000, ui = 5000000000;
//                           ~~   ^~~~~~~~~~
// 1.2 GCC 4.9
//misra-C-2-1-ui-wc-wm.c:61:2: warning: large integer implicitly truncated to unsigned type [-Woverflow]
// uint32_t uh = 4000000000, ui = 5000000000;
//  ^
// 1.3 warning VC/C++ 2013
// c:\misra-c-c-2.1.cpp(128): warning C4305: 
// c:\misra-c-c-2.1.cpp(128): warning C4309: '
//
// 1.4 warning NC30W
//
// 2, output LLVM & GCC4.9
//no ISO/IEC 9899,32bit
//INT_MIN   = -2147483648,     INT_MAX = 2147483647 UINT_MAX  = 4294967295
//LONG_MIN   = 0,     LONG_MAX = -1 ULONG_MAX  = 4294967295
//LLONG_MIN   =          -2147483648,     LLONG_MAX =           2147483647 ULLONG_MAX  =           4294967295
//integer promotion: 8bit
//200 + 200= 400, 0
//200 + 200= 400, 400
//200 + 200 = 400, 400
//16bit
//40000 + 30000= 70000, 0
//40000 + 30000= 70000, 70000
//40000 + 30000 = 70000, 70000
//2000000000 + 2000000000= 4000000000, 0
//2000000000 + 2000000000= 4000000000, 4000000000
//2000000000 + 2000000000 = 4000000000, 4000000000
//cast: 32bit
//2000000000 + 3000000000= 705032704, 0
//2000000000 + 3000000000= 705032704, 705032704
//2000000000 + 3000000000 = 5000000000, 5000000000
//truncation
//4000000000 + 705032704= 410065408, 0
//4000000000 + 705032704= 410065408, 410065408
//4000000000 + 705032704 = 4705032704, 4705032704
//if any 64bit 
//9000000000000000000 + 9446700000000000000= 18446700000000000000, 0
//9000000000000000000 + 9446700000000000000= 18446700000000000000, 18446700000000000000
//9000000000000000000 + 9446700000000000000 = 18446700000000000000, 18446700000000000000
//9100000000000000000 + 9446700000000000000= 99955926290448384, 0
//9100000000000000000 + 9446700000000000000= 99955926290448384, 99955926290448384
//9100000000000000000 + 9446700000000000000 = 99955926290448384, 99955926290448384
//MISRA C.2.1 Type widening in integer promotion
//
// 2.2 vc/c++ 2013
// 2.3 NC30W 
//MISRA C.2.1 Type widening in integer promotion
//INT_MIN = -32768, INT_MAX = 32767 UINT_MAX = 65535
//LONG_MIN = -2147483648, LONG_MAX = 2147483647 ULONG_MAX = 4294967295
//LLONG_MIN = -9223372036854775808, LLONG_MAX = 9223372036854775807 ULLONG_MAX = 18446744073709551615
// 200+200=144
// 200+200=400
// 4000 + 3000 =  4464
// 4000 + 3000 =  70000
// 2000000000+ 2000000000 = 4000000000
// 2000000000+ 2000000000 = 4000000000
// 2000000000+ 3000000000 = 705032704
// 2000000000+ 3000000000  =5000000000
// 4000000000 +705032704  =  410065408
// 4000000000 +705032704  =4705032704
//  9000000000000000000 +9446700000000000000  =  18446700000000000000
// 90000000000000000000 +9446700000000000000  =  18446700000000000000
// 91000000000000000000 +9446700000000000000 =      99955926290448384
// 91000000000000000000 +9446700000000000000 =      99955926290448384
```
MISRA 用自作ヘッダファイルは

```misra_c.h
//--- misra_c.h
// Author, (c) ogawa.kiyoshi, January 7, 2014 
//			@kaizen_nagoya, researchmap.jp/kaizen/MISRA-C/
// Purpose: macro, definition and/or information to Compile Examples.
#ifndef __MISRA_C__
#define __MISRA_C__
#endif

#ifndef  __STANDARD_IO__  // without renesas NC30W
#define __ISO_IEC_9899_1999__
#define __int32bit__
#else // for renesas NC30W only
#define __ISO_IEC_9899_1990__
#define __int16bit__
#endif //__STANDARD_IO__

#ifdef __ISO_IEC_9899_2011__
#include <stdarg.h>
#include <stdint.h> 
#define PRSV() printf("ISO/IEC 9899:2011\n")
#elseif __ISO_IEC_9899_1999__
#include <stdarg.h>
#include <stdint.h> 
#define PRSV() printf("ISO/IEC 9899:1999"\n)
#elseif __ISO_IEC_9899_1990__
// #include <stdint.h> //nc30wa is not supported
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long  uint64_t;
typedef unsigned long  uint128_t;
// macro using printf debug or not.
#define PRSV() printf("ISO/IEC 9899:1990\n")
#elseif __int16bit__
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
typedef unsigned long uint64_t;
typedef unsigned long  uint128_t;
#define PRSV() printf("no ISO/IEC 9899,16bit\n")
#else
#include <stdarg.h>
#include <stdint.h> 
typedef unsigned long long uint128_t;
#define PRSV() printf("no ISO/IEC 9899,32bit\n")
#endif

////////////// for each example
#ifdef __MISRA_C_C_2_1_
#ifndef  __STANDARD_IO__  // without renesas NC30W
#define PR(a,b,c,d,e)  printf("%" #a " + %" #a "= %" #a ", %" #b "\n", c, d, c + d, e)
#define PRC(a,b,c,d,e,f) printf("%" #a" + %" #a " = %" #a ", %" #b "\n", c, d, (f) c + d, e)
#define PRT(a,b,c,d,e,f) PR(a,b, c, d, e); e = c + d;PR(a,b, c, d, e); e = (f) c + d;/*printf(" " #e" =%llu ",e);*/PRC(a,a,c,d,e,f);PRC(a,b,c,d,e,f)
#else // for renesas NC30W only
#define PR(a,b,c,d,e)
#define PRC(a,b,c,d,e,f) 
#endif //__STANDARD_IO__
#endif //__MISRA_C_C_2_1_

//--- stdafx.h not for windows and visual C/C++
// Author, (c) ogawa.kiyoshi, January 7, 2014 
//			@kaizen_nagoya, researchmap.jp/kaizen/MISRA-C/
// Purpose: stdafx.h
#ifndef __stdafx_h__
#define __stdafx_h__
// Note: This is not for MS windows & Visual C/C++
// 			http://social.msdn.microsoft.com/Forums/vstudio/en-US/88339ac0-678d-41d7-a421-519462087277/visual-studio-2008-wont-find-ifdef-win32?forum=vcgenera
#include <stdio.h>
#ifndef _WIN32
#define _NO_WIN32
#else
#error please use MS original stdafx.h
#endif 
#endif
```


<この項は書きかけです。順次追記します。>
This article is not completed. I will add some words in order.

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

MISRA C.2.1 Type widening in integer promotion,(wicm3.c )
https://qiita.com/kaizen_nagoya/items/6a24db5d51efae358cfb

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

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

MISRA C++ 5-0-16
https://qiita.com/kaizen_nagoya/items/7df2d4e05db724752a74

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

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

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一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜ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

TOPPERSまとめ　#名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

Qiita-dockerお宝鑑定団
https://qiita.com/kaizen_nagoya/items/509e125263559b5aed5b

The C++ Standard Library: clang++とg++でコンパイルしてみた(まとめ):14件
https://qiita.com/kaizen_nagoya/items/9bdfaa392443d13e5759

C++17 - The Complete Guide clang++とg++でコンパイルしてみた(まとめ):4件
https://qiita.com/kaizen_nagoya/items/c000f307e642990781e1

C++N3242, 2011, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

プログラマによる、プログラマのための、統計と確率のプログラミングとその後 統計と確率一覧（０）
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

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

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

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
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.
# 文書履歴(document history)
ver. 0.01 初稿 　20240520
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.