SlideShare a Scribd company logo
1 of 35
Download to read offline
C 言語規格& MISRA-C,
みんなで楽しい C プログラミング

名古屋市工業研究所
工学博士・技術士(情報工学)
小川清 @kaizen_nagoya
.NET は Microsoft 社の商標、
TOPPERS は TOPPERS プロジェクトの登録商標です。

TOPPERS
プロジェ
クトマス
コットと
今お配りしている問題全問正解
の方に素敵な贈り物

の解
説書 ( 発売したら )
を差し上げます。
正解の先着10名様
MISRA-C:2012

12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya

2
自己紹介

名古屋市工業研究所勤務

プロジェクト理事
SESSAME/MISRA-C 研究会 2012 準備会
岐阜大学非常勤講師 , ISO/IEC 15504
part2, 6, 9 co-editor
Proof Café / TAPL 勉強会、名古屋ア
ジャイル勉強会、名古屋 de 朝活読書
会、ういろ MUG 、 TeX ユーザ会参
加者
TOPPERS
今日の伝言
C 言語規格:プログラマ思いの規格
MISRA-C

: C プログラマのための文書

◦ C 言語と MISRA-C を勉強するなら TOPPERS プロ
ジェクトに入ろう
 MISRA-C 対応ソースコードが山盛り
 各種 CPU に対応した起動処理がオープンソースで
 毎年アプリケーション開発・アイデアコンテスト
構成
序章

.OSC Nagoya2013 紹介 C 言語の課題

◦ MISRA-C 愛好会

章 . 先週の基礎勉強会で紹介した MISRAC の型に関する話題

2

◦ MISRA-C は関数プログラミングへの入り口だ
◦ C# プログラマも組込に
まとめと今後の課題

◦ TOPPERS プロジェクトで両対応
格言1
間違いのない規格は役に立たない
◦ 技術はどんどん変化しているので対応していると
間違いが残る?
◦ 正しいことを確かめてから出していては発行時期
を逃す。
◦ 役に立つことは論理的に正しいかどうか証明でき
ていない・出来ないことがある
◦ 正しさだけを追求していると誰の役にも立たない
内容だけが残る
C 言語規格は毎回 Corrigendum( 訂正 ) が出る。
今頃 C 言語?
•

CPU が実行するのは機械語。
• C 言語は高級機械語:多くの CPU 提供者が、 CPU とアセン
ブラ、 C コンパイラを同時に出荷。

•

min-CAML では直接アセンブラを生成することによっ
て高速化を実現。
• C を生成すれば、対応 CPU が一気に広がる。

•
•

UNIX/Linux, TOPPERS などの OS は C で記述している
。
C コンパイラを C で記述している。
• C 言語をよくすると、 C コンパイラがよくなる。逆も真?
• アセンブラで書けることなら、 C で書ける。
12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya

7
情報源
C 言語規格 ISO/IEC

9899

◦ WEB に審議文書を公開規格。

http://www.open-std.org/itc1/sc22/wg14/
MISRA-C(MIRA: Motor Industry
Research Association)
◦ 参考情報を下記

http://researchmap.jp/kaizen/MISRA-C/

12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya

8
C言語の規格
 K&R (デファクト)

C 言語の作者の文書
 アメリカ規格(デジュール)
ANSI X. 1989(C89):1999 版から ISO/IEC の標準
制定と同時進行
 国際規格 : フリースタングィング環境 (main 無
可 ) ,ホスト環境( main 引数有)
ISO/IEC 9899:1990(C90=ANSI C89)
 ISO/IEC

ISO/IEC

9899:1995 AMD1(C95)

9899:1999(C99)
ISO/IEC 9899:2011(C2011)
 国内規格
JIS X 3010:1993(C90), JIS X 3010 : 2004(C99)
9
www.jisc.go.jp で無償で閲覧可 (c)kaizen@wh.commufa.jp,
12/14/13 @kaizen_nagoya
C 言語規格のあらまし
の発展を阻害しない。
 C 言語の仕様
 OS の存在を前提とした ホスト環境( OS あ
り ,main 有)
 OS の存在を必ずしも想定していない フリース
タンディング環境。 OS なくてもよく
Main は必要ない 。
 C 言語規格には 「未規定」,「未定義」,
「処理系定義」 がある。
 Rationale という根拠文書が別にある
C の精神 :the spirit of c
 CPU

10

12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya
JIS C 解説 (C の精神)  © JIS
1. 既存のコードを救うことが重要であり、既存の処理系を保護すること
は、重要視しない。
2. 可搬性のある原始プログラムが書けるようにする。 ( 高級アセンブラ
的な使い方による)可搬性がないプログラムを 禁止してはならない
。
3.( 既存の仕様からの)暗黙の意味変更( quiet change) は極力避ける
4. 規格は処理系の作成者とプログラマとの間の約束事を記述するもので
ある。
5. 次の C の精神を遵守する .

1. プログラマを信頼する

2. プログラマが必要である事項を行うことを妨げ

ない
3. 言語は小さく、コンパクトに保つ
4. 一つのオペレーティングシステムには唯一の方
11
法を割り当てる
(c)kaizen@wh.commufa.jp,
12/14/13

@kaizen_nagoya

たとえ可搬性が保障されない方法であったとしても、実行効率を上げ
格言2
プログラマの事を考えてくれるのは

C!

◦ どんな言語を作っても C 言語を生成する機能を作
ろう
◦ そうすればどんな CPU でも動作する
◦ C を生成する時には、 MISRA-C の検査をしよう
 そうすれば CPU 、コンパイラに依存した振る舞いを避
けることができる
動くプログラムで教育(応
用)

 Safer


C


C

C言語の未規定、未定義、
処理系定義の危険性を告発

Puzzle Book
トリッキーなプログラムの
確かめ

プログラミングの落と
し穴

C


MISRA に対応規則記述

コンパイラ自体コンパ
イル
 OS のソースのコンパイル
C



13

TOPPERS
12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya
配布した問題の解き方と採点
プログラムを実行した結果を書いて提出。
機器、道具による違いの可能性がある場合は

、コンパイラの「 bit 幅の規定値による」のよ
うに簡便に理由を記載。理由も採点対象。
全問正解の方には、素敵な本との引き替え券
を。
出題コードの試験および回答の確認は Mac OS
X11.7.5, Xcoce 4.6.2 で実施。
http://researchmap.jp/jo1lnydjn-1797580/#_179758
に掲載
回答の作成例
回答作成は「脳内コンパイラ」で可

。
ISO/IEC 9899:1990, 1999, 2011 のいず
れかの標準を参照し利用した標準を記
載。
問題 1-5 は「 C Puzzle book 」 , 6-10 は
「 C プログラミングの落とし穴」か
らの引用または参考
問題1
From

C Puzzle book ©1.1
#include <stdio.h>
int main(int argc, const char * argv[])
{
int x;
x = -3 + 4 * 5 -6; printf("%dn",x); //(1.1.1)
x = 3 + 4 % 5 - 6; printf("%dn", x);//(1.1.2)
x = -3 * 4 % -6 / 5; printf("%dn", x);//(1.1.3)
x = ( 7 + 6 ) % 5 / 2; printf("%dn", x);//(1.1.4)
return 0;
}
12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya

16
問題1
From

C Puzzle book © 1.1

11
 1
 0
 1


12/14/13

(c)kaizen@wh.commufa.jp,
@kaizen_nagoya

17
問題:避けたいプログラム
誤解を与えるプログラム
自分でも保守できないプログラム
異なる

CPU 、コンパイラで異なる動
作をするプログラム

これらを避けるために

MISRA-C があ

る。
これって早い話、 C プログラマのた
めにある。
MISRA-C の精神と展開 ( 仮説 )
プログラマに楽をさせてあげたい
プログラマが不必要な事を行うことを

妨げる
MISRA-C 仕様は C 言語規格より小さい
(部分集合)
一つのオペレーティングシステムに唯
一の方法を割り当てる例があるとよい
◦ < TOPPERS プロジェクトでは、 MISRA-C に
対応したソースコードを公開>
よくある意見
Q: 自分は天才プログラマなので一切の規制に反対。
A: 天才の書いたプログラムを、凡人が間違ったプログ
ラムにしてしまうことがあります。凡人にも理解出来
るコードが書けるのも天才の技の一つかも。
Q: プログラミング言語の自動生成をしていて自分で
コードを書かないので関係ない。
A: 自動生成で C 言語を使っているとキャストの仕方が
不十分で誤差が拡大したり、0割の発生原因となる。
MISRA-autocode では、自動生成の出力規則も定義。
Q: 試験 (test) 担当で、直接コードを書かないので無関
係。
A: MISRA-C は、 C 言語の部分集合 (subset) 。 MISRA-C
(c)kaizen@wh.commufa.jp,
12/14/13

@kaizen_nagoya

20
MISRA-C 履歴
C: 第一版 , 1998 C90 対応
MISRA C: 第二版 , 2004, C90 対応
MISRA Autocode, 2007/2009
MISRA C++ Guidelines for the use of the
C++ language in critical systems: 2008
MISRA C: 第三版 , 2012, C90/C99 対応
MISRA
MISRA-C
 自動車向け、静的解析可能
 異なる

CPU で同じ動作 ( 未規定・未定義・処理系定義除外)

◦ 関数プログラミングに近い
 -> 副作用による値制御変更小
動的記憶操作無。

◦ − > free 無し。ポインタ無し。
暗黙、明示な型変換で設計者の意図を外
れない。
◦ Underlaying type/ Effective Type
MISRA Autocode






MISRA AC INT: Introduction to the MISRA guidelines for the use of
automatic code generation in automotive systems, 2007.
MISRA AC TL: Modelling style guidelines for the application of TargetLink
in the context of automatic code generation, November 2007.
MISRA AC AGC: Guidelines for the application of MISRA-C:2004 in the
context of automatic code generation,November 2007.
MISRA AC GMG: Generic modelling design and style guidelines, May
2009.
MISRA AC SLSF: Modelling design and style guidelines for the application
of Simulink and Stateflow, May 2009.

模擬試験の浮動小数点を自動生成で

固定小数点に変換
◦ 誤差・桁落ちを少なくするキャスト
◦ 0 割にならないように=>この規則ではできない=>他の検証、
証明が必要
MISRA-C:2012 の例
指針

1.1, プログラムの出力が依存する
処理系定義の動作を文書化し理解する
。
指針 4.8, 構造体または共用体へのポ
インタがコンパイル単位内で逆参照し
ていない場合,オブジェクトの実装を
隠蔽するとよい。<例次頁>
規則 1.3, 未定義又は重大な未規定の
動作が発生しない。


















//misrac.h
#ifndef MISRAC_H
#define MISRAC_H
typedef struct OpaqueType * pOpaqueType;
struct OpaqueType
{
// 実装を記述
};
#endif

指針 4.8 例 :OpaqueType

//Dir.4.8.c
#include "misrac.h”
void f (void)
{
pOpaqueType pObject;
pObject * GetObject(); //OpaqueType object 取得 
UseObject { pObject); // Opaque Type 利用 
}
潜在型 (Underlying type:MISRA-C2004/C90 対応 )
演算、関数、マクロで暗黙、明示の型変

換を説明する際の用語
例: 16 ビットの乗算は途中経過を 32
ビットにする
◦ short int a, b, c;
◦ c=a*b;
◦ なぜ途中で 32 ビットとして扱うか

 かなりの CPU がレジスタの乗算結果を倍の幅で持つ機能有

CPU

のレジスタの抽象化

◦ CPU でレジスタ幅の拡張を想定した型規則 ?
◦ CPU でレジスタを bitifield で処理する際の型 ?
潜在型 (Underlying type:MISRA-C2004/C90 対応 )
 型変換起因問題,変数等が適切な型で宣言していない
 汎整数拡張の影響がないと仮定した場合の式の型
 汎整数拡張がない式の潜在型は C90

で規定する式の型
 汎整数拡張が発生する式で汎整数拡張の結果 int 型となる
演算対象の潜在型は汎整数拡張前の式の型。例:二項演
算子の演算対象 switch 文の条件を表す括弧内の式の潜在
型は汎整数拡張前の式の型.
 汎整数拡張が発生する式の中で式の型が汎整数拡張の影
響を受けない式の潜在型は C90 規定式の型.例:二項演
算子 > , >= , < , <= , == , != を適用した結果の式
の潜在型は int 型
 汎整数拡張が発生する式の中で式の型が汎整数拡張の影
響を受ける式の潜在型は汎整数拡張の影響を無視した型。
例:二項演算子 * , / , % , + , - , & , ^ , | を
適用した結果の式および , 条件演算子( ? : )の結果の式
潜在型 (Underlying type:MISRA-C2004/C90 対
応)

 1)

両演算対象の潜在型が等しい場合は , 演算対象の潜在

型
 2) 両演算対象の潜在型が整数型で大きさが異なる場合は ,
大きい方の演算対象の潜在型
 3) 両演算対象の潜在型が整数型で大きさが等しく符号属
性が異なる(一方が符号無し整数型で他方が符号付き整数
型)場合については,符号無しの演算対象の型
 4) 一方の演算対象の潜在型が整数型で他方の演算対象の
潜在型が浮動小数点型の場合は,浮動小数点型の演算対象
の潜在型。例: 8 ビット符号無し整数型の変数 a と b
の間で加算を行った場合,式「 a+ b 」の潜在型は, 8
ビット符号無し整数 (式「 a + b 」の実際の型は,汎整数
拡張により int 型)
Essential Type-MISRA-C:2012
ISO/IEC

C1990, C1999 の両方に対応

Boolean character

singed

unsigned

enum<i>

floating

_Bool

char

signed char

unsigned char

named enum

float

 

 

singed short

unsigned short

 

double

 

 

singed int

unsigned int

 

long double

 

 

signed long

unsigned long

 

 

 

 

signed long long

unsigned long long

 

 
Effective type :演算子・演算対象

1, 制約破壊
4,5,6,(8) 実装定義
7, 未定義動作
格言3
型を議論するなら

CPU の設計から始める?

◦ 論理回路設計は VHDL, Verilog-HDL をよく使う
◦ VHDL は Ada から派生、 Verilog-HDL は C のプリ
プロを利用
◦ 物理(電気)現象と数学を直接関係づければ最強
◦ 論理回路用 C 言語: System-C, Spec-C, Impulse-C…
Open

source hardware…
まとめと今後の展望
 C 言語規格はプログラマのための規格

無償で検討でき、プログラマを大切に

 MISRA-C は関数プログラミングの入口

副作用による振舞の違いを回避
Effective type(Misra-c:2012,C90&C99) と Undelay
type(MISRA-C:2004,C90) の検討

 C 言語規格、 MISRA-C を勉強するなら

TOPPERS( オープンソースの OS)
 型理論を勉強したら CPU を設計しよう( C で書
ける)
 今後の展望
C# 技術者が組込へ…
.NET の基礎は .NET micro Framework だ…
TOPPERS アプリケーション開
発・アイデアコンテスト 2013

アプリケーション開発部門

◦ 銀賞: TOPPERS Realtime System Sample ( RSS )
LPCXpresso GPS Clock 中村晋一郎
◦ 銅賞: Toppers_JSP と Scicos_lab による組込みメカト
ロニクス制御シミュレーション 塩出武

◦ 銅賞: lwIP の移植 松浦光洋

活用アイデア部門

◦ 銀賞: .NET micro Framework for TOPPERS 株式会社
デバイスドライバーズ 日高亜友
◦ 銅賞: uIP による WEB サーバの開発 今西孝也
(高知県工業技術センター)
おまけ: .net micro Framework 基礎
256

KBytes of flash and 64 KBytes of RAM. I
a subset of the .NET
シミュレータデバッグ機能
.net micro Framework は
.NET Framework の部分集合−>

.NET 基礎は
.net micro Framework
( 最後の行は仮説 )
2014 年2月に演習付きセミナ予定
協賛会社の皆様
ご聴講いただいた皆様に

感謝

& 回答の提出をお待ちしています
提出先 :@kazen_nagoya

More Related Content

What's hot

エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩Takuya Tezuka
 
deep dive distributed tracing
deep dive distributed tracingdeep dive distributed tracing
deep dive distributed tracingTakayoshi Tanaka
 
REBOKを社内展開する際の障壁
REBOKを社内展開する際の障壁REBOKを社内展開する際の障壁
REBOKを社内展開する際の障壁mkoszk
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話Takanori Sejima
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Paradigm shifts in QA for AI products
Paradigm shifts in QA for AI productsParadigm shifts in QA for AI products
Paradigm shifts in QA for AI productsYasuharu Nishi
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Preferred Networks
 
Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)
Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)
Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)Keigo Suda
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門Kiro Harada
 
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門1070: CUDA プログラミング入門
1070: CUDA プログラミング入門NVIDIA Japan
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編Fixstars Corporation
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発m ishizaki
 
頑張りすぎないScala
頑張りすぎないScala頑張りすぎないScala
頑張りすぎないScalatakezoe
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 

What's hot (20)

エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
 
deep dive distributed tracing
deep dive distributed tracingdeep dive distributed tracing
deep dive distributed tracing
 
REBOKを社内展開する際の障壁
REBOKを社内展開する際の障壁REBOKを社内展開する際の障壁
REBOKを社内展開する際の障壁
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Paradigm shifts in QA for AI products
Paradigm shifts in QA for AI productsParadigm shifts in QA for AI products
Paradigm shifts in QA for AI products
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
 
Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)
Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)
Apache Kafka & Kafka Connectを に使ったデータ連携パターン(改めETLの実装)
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門
 
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門1070: CUDA プログラミング入門
1070: CUDA プログラミング入門
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
頑張りすぎないScala
頑張りすぎないScala頑張りすぎないScala
頑張りすぎないScala
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 

Viewers also liked

初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみたEric Sartre
 
Verilog-HDL Tutorial (1)
Verilog-HDL Tutorial (1)Verilog-HDL Tutorial (1)
Verilog-HDL Tutorial (1)Hiroki Nakahara
 
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013Kiyoshi Ogawa
 
Cpuの速度向上はいかに実現されたのか
Cpuの速度向上はいかに実現されたのかCpuの速度向上はいかに実現されたのか
Cpuの速度向上はいかに実現されたのかJoongjin Bae
 
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略Hiroki Nakahara
 
Verilog-HDL Tutorial (13)
Verilog-HDL Tutorial (13)Verilog-HDL Tutorial (13)
Verilog-HDL Tutorial (13)Hiroki Nakahara
 
やさしい日本語言い換えシステムを支える技術
やさしい日本語言い換えシステムを支える技術やさしい日本語言い換えシステムを支える技術
やさしい日本語言い換えシステムを支える技術Eric Sartre
 
パッチを投稿してみた話
パッチを投稿してみた話パッチを投稿してみた話
パッチを投稿してみた話wata2ki
 
Debian Testing on Windows Tablet T100TA
Debian Testing on Windows Tablet T100TADebian Testing on Windows Tablet T100TA
Debian Testing on Windows Tablet T100TANetwalker lab kapper
 

Viewers also liked (10)

初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
 
Verilog-HDL Tutorial (1)
Verilog-HDL Tutorial (1)Verilog-HDL Tutorial (1)
Verilog-HDL Tutorial (1)
 
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
 
Cpuの速度向上はいかに実現されたのか
Cpuの速度向上はいかに実現されたのかCpuの速度向上はいかに実現されたのか
Cpuの速度向上はいかに実現されたのか
 
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
 
Verilog-HDL Tutorial (13)
Verilog-HDL Tutorial (13)Verilog-HDL Tutorial (13)
Verilog-HDL Tutorial (13)
 
やさしい日本語言い換えシステムを支える技術
やさしい日本語言い換えシステムを支える技術やさしい日本語言い換えシステムを支える技術
やさしい日本語言い換えシステムを支える技術
 
パッチを投稿してみた話
パッチを投稿してみた話パッチを投稿してみた話
パッチを投稿してみた話
 
PYNQ祭り
PYNQ祭りPYNQ祭り
PYNQ祭り
 
Debian Testing on Windows Tablet T100TA
Debian Testing on Windows Tablet T100TADebian Testing on Windows Tablet T100TA
Debian Testing on Windows Tablet T100TA
 

Similar to 「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部

.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会Kiyoshi Ogawa
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 
なにわテック20180127
なにわテック20180127なにわテック20180127
なにわテック20180127Natsutani Minoru
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_publicKazuaki Ishizaki
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_publicKazuaki Ishizaki
 
Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30Kiyoshi Ogawa
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macrodigitalghost
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)Akira Takahashi
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境Yo Ya
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_publicKazuaki Ishizaki
 
基礎からC言語 part1
基礎からC言語 part1基礎からC言語 part1
基礎からC言語 part1Hiroyuki Ito
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714swkagami
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryAkira Takahashi
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTURE Project
 

Similar to 「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部 (20)

.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
 
Misrac20150523
Misrac20150523Misrac20150523
Misrac20150523
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
なにわテック20180127
なにわテック20180127なにわテック20180127
なにわテック20180127
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
Misrac20150523
Misrac20150523Misrac20150523
Misrac20150523
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
 
Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macro
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
 
ji-2. 計算
ji-2. 計算ji-2. 計算
ji-2. 計算
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
基礎からC言語 part1
基礎からC言語 part1基礎からC言語 part1
基礎からC言語 part1
 
kagamicomput201714
kagamicomput201714kagamicomput201714
kagamicomput201714
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 

More from Kiyoshi Ogawa

Misracompliant20162020
Misracompliant20162020Misracompliant20162020
Misracompliant20162020Kiyoshi Ogawa
 
High Quality Design with Hcd and hazop
High Quality Design with Hcd and hazopHigh Quality Design with Hcd and hazop
High Quality Design with Hcd and hazopKiyoshi Ogawa
 
Deep learningwithgithubanddocker
Deep learningwithgithubanddockerDeep learningwithgithubanddocker
Deep learningwithgithubanddockerKiyoshi Ogawa
 
Deep learningwithgithubanddocker
Deep learningwithgithubanddockerDeep learningwithgithubanddocker
Deep learningwithgithubanddockerKiyoshi Ogawa
 
Who like C++ coding standard
Who like C++ coding standardWho like C++ coding standard
Who like C++ coding standardKiyoshi Ogawa
 
Who enjoy a coding standard? ver. 0.20
Who enjoy a coding standard? ver. 0.20Who enjoy a coding standard? ver. 0.20
Who enjoy a coding standard? ver. 0.20Kiyoshi Ogawa
 
Who enjoy a coding standard?
Who enjoy a coding standard?Who enjoy a coding standard?
Who enjoy a coding standard?Kiyoshi Ogawa
 
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)Kiyoshi Ogawa
 
How can we resolve problems.
How can we resolve problems.How can we resolve problems.
How can we resolve problems.Kiyoshi Ogawa
 
Datamining Introduction using R with Raspbian on Raspberry Pi 3B.
Datamining Introduction using R with Raspbian on Raspberry Pi 3B.Datamining Introduction using R with Raspbian on Raspberry Pi 3B.
Datamining Introduction using R with Raspbian on Raspberry Pi 3B.Kiyoshi Ogawa
 
Hazop Safety and Security at Fukui 2017(2/2)
Hazop Safety and Security at Fukui 2017(2/2)Hazop Safety and Security at Fukui 2017(2/2)
Hazop Safety and Security at Fukui 2017(2/2)Kiyoshi Ogawa
 
Hazop Safety and Security at Fukui 2017(1/2)
Hazop Safety and Security at Fukui 2017(1/2)Hazop Safety and Security at Fukui 2017(1/2)
Hazop Safety and Security at Fukui 2017(1/2)Kiyoshi Ogawa
 
Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)Kiyoshi Ogawa
 
Hazop and triz by/of/for the children(2/3)
Hazop and triz by/of/for the children(2/3)Hazop and triz by/of/for the children(2/3)
Hazop and triz by/of/for the children(2/3)Kiyoshi Ogawa
 
Hazop and triz by/of/for the children(1/3)
Hazop and triz by/of/for the children(1/3)Hazop and triz by/of/for the children(1/3)
Hazop and triz by/of/for the children(1/3)Kiyoshi Ogawa
 
Raspberrypitraining20171027
Raspberrypitraining20171027Raspberrypitraining20171027
Raspberrypitraining20171027Kiyoshi Ogawa
 
STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning
STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning
STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning Kiyoshi Ogawa
 

More from Kiyoshi Ogawa (20)

Misracompliant20162020
Misracompliant20162020Misracompliant20162020
Misracompliant20162020
 
High Quality Design with Hcd and hazop
High Quality Design with Hcd and hazopHigh Quality Design with Hcd and hazop
High Quality Design with Hcd and hazop
 
Deep learningwithgithubanddocker
Deep learningwithgithubanddockerDeep learningwithgithubanddocker
Deep learningwithgithubanddocker
 
Deep learningwithgithubanddocker
Deep learningwithgithubanddockerDeep learningwithgithubanddocker
Deep learningwithgithubanddocker
 
Nagoya2018
Nagoya2018Nagoya2018
Nagoya2018
 
Hazop tokyo201809
Hazop tokyo201809Hazop tokyo201809
Hazop tokyo201809
 
Who like C++ coding standard
Who like C++ coding standardWho like C++ coding standard
Who like C++ coding standard
 
Who enjoy a coding standard? ver. 0.20
Who enjoy a coding standard? ver. 0.20Who enjoy a coding standard? ver. 0.20
Who enjoy a coding standard? ver. 0.20
 
Who enjoy a coding standard?
Who enjoy a coding standard?Who enjoy a coding standard?
Who enjoy a coding standard?
 
機械と標準
機械と標準機械と標準
機械と標準
 
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)
 
How can we resolve problems.
How can we resolve problems.How can we resolve problems.
How can we resolve problems.
 
Datamining Introduction using R with Raspbian on Raspberry Pi 3B.
Datamining Introduction using R with Raspbian on Raspberry Pi 3B.Datamining Introduction using R with Raspbian on Raspberry Pi 3B.
Datamining Introduction using R with Raspbian on Raspberry Pi 3B.
 
Hazop Safety and Security at Fukui 2017(2/2)
Hazop Safety and Security at Fukui 2017(2/2)Hazop Safety and Security at Fukui 2017(2/2)
Hazop Safety and Security at Fukui 2017(2/2)
 
Hazop Safety and Security at Fukui 2017(1/2)
Hazop Safety and Security at Fukui 2017(1/2)Hazop Safety and Security at Fukui 2017(1/2)
Hazop Safety and Security at Fukui 2017(1/2)
 
Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)Hazop and triz by/of/for the children(3/3)
Hazop and triz by/of/for the children(3/3)
 
Hazop and triz by/of/for the children(2/3)
Hazop and triz by/of/for the children(2/3)Hazop and triz by/of/for the children(2/3)
Hazop and triz by/of/for the children(2/3)
 
Hazop and triz by/of/for the children(1/3)
Hazop and triz by/of/for the children(1/3)Hazop and triz by/of/for the children(1/3)
Hazop and triz by/of/for the children(1/3)
 
Raspberrypitraining20171027
Raspberrypitraining20171027Raspberrypitraining20171027
Raspberrypitraining20171027
 
STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning
STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning
STAMP/STPA and UML/HAZOP on the IoT and AI/Deep Learning
 

「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部

Editor's Notes

  1. C言語にはANSI ISO IEC JISなどの規格があります。 MISRA-Cは、欧州の自動車関連の団体の発行しているCコーディング標準で 他にソフトウェア開発作業標準を発行しています
  2. 身の回りのありとあらゆるものに組込みシステムが使われています。 この組み込みシステムについて理解し これに使われるリアルタイムOSについて理解することにしました。 組込みにはC言語がよく使われています。 Cのコーディング標準としてMISRA-Cというものがあるそうで MISRA-Cの内容を知り、 MISRA-Cのルールが有効なルールか、現実にありそうなことを確かめ、 またルール間の矛盾がないかを確かめ そして、MISRA-Cの教材を作ることを目的としました。
  3. 1. The use of expression of essentially floating type for these operands is constraint violation 2. An expression of essentially Boolean type should always be used where an operand is interpreted as a Boolean value. 3. An operand of essentially Boolean type should not be used where an operand is interpreted as a numeric value. 4. An operand of essentially character type should not be used where an operand is interpreted as a numeric value. The numeric values of character data are implementation defined. 5. An operand of essentially enum type should not be used in arithmetic operation because an enum object uses an implementation-defined integer type. An operation involving an enum object may therefore yield a result with an unexpected type. Note that an enumeration constant from an anonymous enum has essentially singed type. 5 Shift and bitwise operations should only be performed on operands of essentially unsigned type. The numeric value resulting from their use on essentially signed types is implementation defined. 6.