C言語

汎用プログラミング言語のひとつ

C: C programming language1972AT&TC languageCCC++JavaC#C[1]
C言語
C言語
C言語のロゴ
パラダイム 命令型プログラミング構造化プログラミング手続き型プログラミング ウィキデータを編集
登場時期 1972年 (52年前) (1972).
開発者 ベル研究所デニス・リッチー米国国家規格協会国際標準化機構ケン・トンプソン ウィキデータを編集
最新リリース ISO/IEC 9899:2018/ 2018年 (6年前) (2018)
型付け 弱い静的型付け
主な処理系 GCC, Clang, Visual C++, Intel C++ Compiler
影響を受けた言語 ALGOL 68、B言語アセンブリ言語FORTRANPL/ICPLBCPL、ALGOL 60、ALGOL ウィキデータを編集
影響を与えた言語 awkcshC++Objective-CRustD言語JavaJavaScriptLimbo
プラットフォーム Microsoft WindowsUnix系 ウィキデータを編集
ウェブサイト
拡張子 .c, .h
テンプレートを表示

カテゴリ / テンプレート

ANSIISO、またJISにより言語仕様が標準規格化されている。

特徴

編集

Cには他のプログラミング言語と比較して、特筆すべきいくつかの特徴がある。

利点

編集



OS

C使C



CPUOS使

欠点

編集



CC[2]



UNIXCOS[2][3]

C使C使CC使CGUIC

MISRA CCERT C使CC

機能と自由度

編集

 ;{ }

ALGOLgoto使MISRA Cgoto

使

C使CUNIXOSOS main [3]mainC++[4][5]mainMISRA C

便COSMISRA CC

使ANSI C (C89) ISO/IEC 9899:1990 (C90) ASCIIISO 6463ISO/IEC 9899:1995 AMD (C95) []2


アセンブラとのインタフェース

編集

#pragma asmCPU

コンパイラ仕様

編集

1intintANSI C (C89) intISO/IEC C:1999 (C99) 使ClangGCCC99C99C89()C99

 (preprocessor) 

処理系の簡素化

編集





C





char'\0'使1





[6]


その他

編集



CC[]UNIXC
POSIXmallocPOSIXAPI使LinuxGFP_KERNELGFP_ATOMIC使kmallockzalloc使[7]

使

CC++CC++

ANSI/ISOCC++Objective-CCCAPICOpenGLOpenCLC

コード例

編集

Hello worldプログラム

編集

CHello worldCstdio.hputsprintf
/* int puts(const char* s) を使う場合。 */
#include <stdio.h>

int main(void)
{
    puts("Hello, world!");
    return 0;
}
/* int printf(const char* format, ...) を使う場合。 */
#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("Hello, world!\n");
    return 0;
}

\n\

mainmain使[8]

printf使

mainprintfC[9][10]JavaC#Pythonmain

主な制御構造

編集

主な標準ライブラリ関数

編集

歴史

編集

誕生

編集

CAT&TB#The Development of the C Language

1972UNIXBC[11]UNIXCCPortable C CompilerUNIXC

UNIXCThe Development of the C LanguageCOSOS使

UNIXMulticsOS

UNIXOS

FortranB

BB

使OS[12]

B1971

1972CUNIX2使

UNIX環境とC言語

編集

UNIXK&RCCPUUNIXC[13]

C言語誕生時の環境と他言語との比較

編集

C使ASR-37[12] ASR-371967ASCII ISO R646-7bit{}使 PDP-11使ASR-331963ASCIIASA X3.4{}[14]

{}CB使 C使使

PascalBASIC使beginendREMOS

CASCII1980

{...}Cbegin...end使便

PCとC言語

編集

1980 (PC) 8CPUROM-BASICBASIC198016CPUROM-BASICPCTurbo CQuick C288086PC

現在のC言語

編集

1990C

19902000PCGUIC++Visual BasicJavaC#Objective-CPHPJavaScriptC使CC++JavaC#CC++C#使C/C++Rust[15][16]

CAPIC++Java2021

PythonJavaScriptSwiftKotlinREPLC

規格

編集

米国国家規格協会(ANSI)による標準化が行われるまで、1978年出版のデニス・リッチーブライアン・カーニハンの共著『The C Programming Language』が実質的なC言語の標準として参照されてきた。この書籍は、著者らのイニシャルを取って「K&R」とも呼ばれている。C言語は発展可能な言語で、K&Rの記述も発展の可能性のある部分は厳密な記述をしておらず、曖昧な部分が存在していた。そのためC言語が普及するとともに、互換性のない処理系が数多く誕生した。

C89/C90

編集

ISO/IEC JTC1ANSIC198912ANSIANSI X3.159-1989, American National Standard for Information Systems -Programming Language-C199012ISOINTERNATIONAL STANDARD ISO/IEC 9899 : 1990(E) Programming Languages-CISO/IECANSIISO/IECC89 (ANSI C89) ISO/IEC C90

JIS X 3010-1993 C199310

C++[4]voidenumintchar

3[17]

 (undefined)

 (unspecified)

 (implementation-defined)



8/16/32 (CPU) sizeoflimits.h1sizeof(char) == 1char18CHAR_BITchar8sizeof(int) >= 2sizeof(int) >= sizeof(short)sizeof(long) >= sizeof(int)short216intlongCPUintshortlongsignedcharsignedunsignedcharsigned charunsigned char

BCPLC++1//gccClangGNU-std=gnu89

GNU C  Clang -std=c89-ansi-std=c90GNU使C89[5]-pedanticWatcom COpen Watcom

C89
  • ISO/IEC 9899/COR1:1994
  • ISO/IEC 9899/AMD1:1995 - 英語圏での利用を想定して制定したC89に対して、国際化のためワイド文字版ライブラリを追加したAmendment1が1995年に発行された。
  • ISO/IEC 9899/COR2:1996

1999121ISO/IEC JTC1 SC22 WG14 C++ISO/IEC 9899:1999(E) Programming Language--C (Second Edition) CC99

 JIS X 3010:2003C





_Boolstdbool.h

_Complex_Imaginarycomplex.h

64 long long int

stdint.h

//1

inline

alloca[18]

C99
  • ISO/IEC 9899:1999 Cor. 1:2001(E)
  • ISO/IEC 9899:1999 Cor. 2:2004(E)
  • ISO/IEC 9899:1999 Cor. 3:2007(E)

2011128ISO/IEC 9899:2011 C11

C11UnicodeUTF-32UTF-16UTF-8type-genericC++quick_exit

_Noreturn_Noreturngcc__attribute__((__noreturn__))returnreturn_exitexecvelongjmp[6]

C11C11_AtomicCC11C99C11

gets

2018年にISO/IEC 9899:2018(通称C17またはC18)として改訂された。仕様の欠陥修正がメインのマイナーアップデートである[19]

主なC言語処理系

編集

大抵の処理系はC言語とC++両方をサポートしている。C言語とC++の共通部分を明確にし、二つの言語の違いに矛盾が生じないようにすることが課題になっている。

Linux、Windows、UNIX用

編集

C++ Builder

Windows/macOS/iOS/AndroidC/C++BCCRADWindowsx86Clang/LLVM[20]DOS/WindowsBorland C/C++Turbo C/C++

Clang

LLVMC/C++Objective-CCPU

GNU (GCC)

C/C++CPU使

GCC 4.5C99[21]

GCC 4.9C11[22]

Microsoft Visual C++ (MSVC)

WindowsC/C++ANSI C2013C99x86x64Xbox 360Windows CEPowerPCARMMIPSItaniumMS-DOSWindowsMicrosoft C CompilerQuick C[23]

Intel C++ Compiler (ICL/ICC)

IA-32 (x86) Intel 64 (x64) C/C++Windows/Linux/macOS/Androidgcc

11.1IA-64 (Itanium) 12.0[24]

C99[25]C11[26]18.0C11

Open Watcom C/C++

WindowsLinuxOS/2MS-DOSDOSx86CC++Watcom C/C++

Portable C Compiler

gccUNIXC

Digital Mars C/C++

WindowsMS-DOSDOSx86CC++Datalight CZorland CZortech C/C++Symantec C/C++

組み込み用、8ビット・16ビット・32ビット・64ビットCPU用(クロスコンパイラ)

編集

Green Hills Software C/C++

CC++ WindowsSolarisLinuxHP/UXver4

CodeWarrior C/C++

CC++Classic Mac OSWindowsBeOSPalm

ARM C/C++

ARM CPUCC++

IAR C/C++

CPUEWSWARM CPUCC++ARMCPU

High C

x86PC/AT80386FM TOWNSHigh C 386使RISC

BDS-C

CP/M8080Z80K&RC

Hitech-C

Z80PIC

Lattice C

1980C1.0personal19,800[27][28]

LSI C

8080Z80LSI C-808086LSI C-868086使

micro-C

8MC6809C[29]

関連する主なプログラミング言語

編集

先祖

編集

ALGOL

PascalC

BCPL

MULTICS

B

UNIXBCPLC

継承・拡張・サブセット

編集

C++

CSimulaC

Objective-C

CC Smalltalk CC++C++

Java

C++Java VM, JVM

C#

.NET FrameworkCC++JavaDelphi

Rust

CC++RAIIC/C++

Cyclone

C

SystemC

C++IEEE 1666-2005ISO 8866:1991

Impulse C

C

Unified Parallel C

C99

Cg

CGPU3NVIDIA

OpenGLGLSLDirectXDirect3DHLSLOpenCLOpenCL-CCDSL

注釈・出典

編集

注釈

編集


(一)^ C-family, C-style, C-likeCC

(二)^ [1]

(三)^ BASICPascal

(四)^ C89

(五)^ C89GNU C
gcc -ansi -pedantic -fstrict-aliasing -Wall -Wextra -Wmissing-declarations -Werror test.c


(六)^ setjmp.h

出典

編集


(一)^  | iSUS

(二)^ C 19 C?

(三)^ 1 Chapter 1 C1Cgihyo.jp  

(四)^ ISO/IEC 14882:2003 §3.6.1 The function main shall not be used within a program.

(五)^ JIS X 3014:2003C++調 §3.6.1 main

(六)^ EXP33-C.  JPCERT/CC20143252014822

(七)^  Memory Allocation Guide. The Linux Kernel documentation. 2023118

(八)^ main  - cppreference.com

(九)^ PythonPythonPython1/2  - IT

(十)^ Hello, World | Programming Place Plus  2

(11)^ Portability of C Programs and the UNIX Systems

(12)^ abThe Evolution of the Unix Time-sharing System

(13)^  - ZDNet Japan

(14)^ http://www.tohoho-web.com/ex/draft/kanji.htm

(15)^ RustAndroid GoogleOS - 

(16)^ MicrosoftWindows 10Rust | TECH+

(17)^ C FAQ 11

(18)^ 6.19 Arrays of Variable Length

(19)^ C - cppreference.com

(20)^ Clang  C++  - RAD Studio

(21)^ Status of C99 features in GCC - GNU Project - Free Software Foundation (FSF)

(22)^ C11Status - GCC Wiki

(23)^ Microsoft Releases C Program Wares, Provides Rebates. InfoWorld: p. 29. (1987119). https://books.google.pl/books?id=Sj0EAAAAMBAJ 

(24)^ ® C++ Composer XE 2011 Windows*  - w_ccompxe_2011.7.258_Release_Notes_ja_JP.pdf

(25)^ C99 Support in Intel® C++ Compiler | Intel® Software

(26)^ C11 Support in Intel C++ Compiler | Intel® Software

(27)^ 1987 pp. 339342 - 

(28)^ 1988JICC pp. 201 - Personal

(29)^ ucom10 1983, p. 80.

参考文献

編集

2015便COSOS

C

 

K&RThe C Programming Language222ISOJIS X 3010:2003CISO/IEC JTC1 SC22 WG14+ISO/IEC 9899:1999 Cor. 1:2001(E)C9920218ISO/IEC 9899:2018

C



CMISRA C

C

R. 

C

 No.10CQ198391 

C

外部リンク

編集