POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

FeedlyRSSTwitterFacebook
Matt Stancliff

本記事は、原著者の許諾のもとに翻訳・掲載しております。


(2016/3/2)

(Mattx86-64 Unix/Linux/POSIX( 8-bit10CPUWin/Linux))

201520152016

 Matt 

Adrián Arroyo Calle  ¿Cómo programar en C (en 2016)? 

Keith Thompson  howto-c-response 

Rob Graham  Some notes C in 2016 稿



C1C使

C使

C 1970 CCC

C8090

20

c99c991999Cc112011C11>99




Clang


ClangC11使 GNU C11 mode 

C11使 -std=c11 C99 -std=c99 

ClangGCC




GCC -std=c99  -std=c11 


GCC使Clang  

GCC-5Clang GNU C11 mode c1199 -std=c11  -std=c99 






-O2-O3


 -O2 使 -O3 使




-Os


姿 -Os 






-Wall -Wextra -pedantic


  -Wpedantic  -pedantic 使




 -Werror  -Wshadow 


 -Werror 使GCC




-Wstrict-overflow -fno-strict-aliasing 


-fno-strict-aliasing C -fno-strict-aliasing 使




Clang -Wno-missing-field-initializers 


GCCGCC4.7.0









C




LTO  Link Time Optimization


LTO

LTO.a.so.dylib make -j 

Clang LTO   

GCC LTO

2016ClangGCCLTO -flto 

LTO 使使LTOLTO使



Arch



-march=native


CPU使





 -msse2  -msse4.2 便


 char  int  short  long  unsigned 使

 #include <stdint.h>   使

 stdint.h 




int8_t  int16_t  int32_t  int64_t  

uint8_t  uint16_t  uint32_t  uint64_t  

float  32

double  64


char 使C char 使

 char  uint8_t 18使 uint8_t * 使


uint16_t  int32_t  fast  least  stdint.h 

fast 


int_fast8_t  int_fast16_t  int_fast32_t  int_fast64_t  

uint_fast8_t  uint_fast16_t  uint_fast32_t  uint_fast64_t  


fast X fast 使

64 uint_fast16_t  uint64_t 16

fast OS XOS X fast   

fast便1664使 uint_fast16_t  uint_fast16_t 1664Linux64

fastOS X uint_fast16_t 16Linux64

fast  int  fast 

least 


int_least8_t  int_least16_t  int_least32_t  int_least64_t  

uint_least8_t  uint_least16_t  uint_least32_t  uint_least64_t  


least  

 least least

int 使使


int 

inttypes.h  RATIONALE 使 int 使1632 int 1632 int 使

使

ISOC


 char 使


2016 char 使  API char  strncat printf%s const char *hello = "hello"; C "hello"  char [] 

C11UTF-8 const char *abcgrr = u8"abc????";  char [] 

 int  long 使


使API使


unsigned 使使C uint64_t 使 unsigned long long int 使 stdint.h        使   


 long 



使 <stdint.h>  uintptr_t  stddef.h  ptrdiff_t 便
long diff = (long)ptrOld - (long)ptrNew;

の代わりに

ptrdiff_t diff = (uintptr_t)ptrOld - (uintptr_t)ptrNew;

または

printf("%p is unaligned by %" PRIuPTR " bytes.\n", (void *)p, ((uintptr_t)somePtr & (sizeof(void *) - 1)));

を使います。


後編 に続きます。

監修者
監修者_古川陽介
古川陽介
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
複合機メーカー、ゲーム会社を経て、2016年に株式会社リクルートテクノロジーズ(現リクルート)入社。 現在はAPソリューショングループのマネジャーとしてアプリ基盤の改善や運用、各種開発支援ツールの開発、またテックリードとしてエンジニアチームの支援や育成までを担う。 2019年より株式会社ニジボックスを兼務し、室長としてエンジニア育成基盤の設計、技術指南も遂行。 Node.js 日本ユーザーグループの代表を務め、Node学園祭などを主宰。