VSコードのアプデをしたらヘッダファイルに緑色の波線がでるようになった
auです。
明日テストなので軽く書きたいと思います。
今日VSコードを立ち上げてみたのですが、画像のようにヘッダファイルに波線がでていて、メッセージには「#include errors detected. Please update your includePath. IntelliSense features for this translation unit (C:\Users\ユーザー名\Documents\cs2018_PL1\kimatu\test1.c) will be provided by the Tag Parser.」とでています。
しかし、コンパイルなどはちゃんとでているので問題はない?とは思うのですが、検索してみても自分が思ったような解決策がでないので、もしわかる方がいたらコメントをお願いします。
アラインメントとは
auです。
今回はアラインメントについて調べてみました。
アラインメントとは
align: 整列すること
アラインメントは"CPUが1度に処理できるデータサイズのこと"です。
1バイトは8ビットであるので、32ビットCPUでは4バイトのデータを一度で読み書きすることができます。この4バイトのことをワードといいます。
この特性を活かし、int型の4ビットを4バイトの始まりのところに配置することで効率的に処理をすることができます。「4バイトにアラインする(整列する)」という。
C言語でchar型とint型をそれぞれ宣言した場合、5バイトになる。
4ビットの場合
1 2 3 4 (ビット)
char | int | int | int
int | | |
となり、2回処理が行われてしまうため、非効率的である。
また、使用しているCPU、コンパイラによってアラインメントは変わってくるそうです。
エンディアンとは
auです。
今回はエンディアンについて調べました。
リトル・エンディアン、ビック・エンディアンがあって、バイトの並び順
関する用語ということだけは授業で軽く教わりました。
エンディアンとは
エンディアンとは、1バイト(半角の文字)ではなく、2バイト(日本語などのマルチバイト文字)のデータを記録や伝送をするときにバイトの並び方を決めることをエンディアンといいます。
例えば、0x11223344というデータがあったとして、これをメモリのアドレスに書き込むとします。
その際、一番大きいバイト(左側)から順にいれていくと
11
22
33
44
となり、この大きい順番から格納することを「ビッグ・エンディアン」といい、逆にいれていくことを「リトル・エンディアン」といいます。
なぜ大きい順、小さい順があるかというと、CPUによってビッグ・エンディアンかリトル・エンディアンか決まっているからです。
C言語の列挙型
auです。
今回は列挙型を扱う"enum"について調べてみました。
列挙型とは
例えば、月曜日~日曜日までがあったとします。
enum week {Mon, Tue, Wed, Thu, Fri, Sat, Sun};
月曜日を0、日曜日が7になるように、それぞれに整数値が振られていきます。
#include <stdio.h> // 列挙型 enum week { Mon, Tue, Wed, Thu, Fri, Sat, Sun }; int main(void) { enum week week; week = Mon; printf("Mon = %d\n", week); week = Tue; printf("Tue = %d\n", week); week = Wed; printf("Wed = %d\n", week); week = Thu; printf("Thu = %d\n", week); week = Fri; printf("Fri = %d\n", week); week = Sat; printf("Sat = %d\n", week); week = Sun; printf("Sun = %d\n", week); return 0; } // 実行結果 Mon = 0 Tue = 1 Wed = 2 Thu = 3 Fri = 4 Sat = 5 Sun = 6
それぞれ0から番号が振られていることが確認できました。
Switch case文でよく使われているそうです。
スタックポインタとは
auです。
今回はスタックポインタについて調べました。
前回のスタックの知識を利用します。
program-shoshinsya.hatenablog.com
スタックポインタとは
スタックポインタとは、スタックで積み上げられた一番上のデータの次アドレスを保持するレジスタのことで、次に入れるデータのアドレスを指します。
スタックポインタは、新しいデータが追加されるとそのデータの次のアドレスを指すようになり、逆にデータが取り出されると一つ前のアドレスを指すようになります。