callmekohei's blog

callmekoheiのひとりごと

新しい言語を学んでみる!( C言語 )

f:id:callmekohei00:20170926090451p:plain

Summary

callmekohei的に新しい言語を学ぼうかな〜という気持ちになったのでとりあえずC言語というのを学んでみます!

環境と準備

環境

tmp$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29

tmp$ uname -a
Darwin Mochidas-MacBook-Air.local 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64

tmp$ nvim --version
NVIM v0.2.0
Build type: Release

準備 単語補完のプラグインdeopleteの設定

[[plugins]]
repo = 'zchee/deoplete-clang'
hook_add = '''
let g:deoplete#sources#clang#libclang_path='/Library/Developer/CommandLineTools/usr/lib/libclang.dylib'
let g:deoplete#sources#clang#clang_header='/Library/Developer/CommandLineTools/usr/lib/clang'
'''
on_ft = ['c', 'cpp', 'cmake']
depends = ['deoplete.nvim']

ここからお勉強〜

Hello world!

#include<stdio.h>

int main()
{
    printf("hello C!");
}

結果

hello C!
*** time : 0.151816 s ***

感想

C言語 マスターした!

FizzBuzz

#include<stdio.h>

int main(void) {
    int i;
    for(i=0;i<100;i++){
        if (i % 15 == 0)
            printf("FizzBuzz\n");
        else if
            (i % 5 == 0)
            printf("Buzz\n");
        else if
            (i % 3 == 0)
            printf("Fizz\n");
        else
            printf("%d\n", i);
    }
    return 0;
}

high-order function

#include<stdio.h>

int add10( int x ){
    return x + 10;
}

int add100(int x, int(*func)(int) ){
    return func(x) + 100;
}

int main(void){
    printf("%d", add100(1,add10));
}

結果

111
*** time : 0.181887 s ***

ByVal, ByRef

#include<stdio.h>

// byVal
int Add10ByVal(int x){
    return x + 9;
}

// byRef
void Add10ByRef(int *x){
    *x = *x + 10;
}

int main(){
    printf("ByVal ---> %d\n",Add10ByVal(100));
    
    int tmp = 100;
    Add10ByRef(&tmp);
    printf("ByRef ---> %d",tmp);
}

結果

ByVal ---> 109
ByRef ---> 110
*** time : 0.156918 s ***