以前の記事:
C仕様編集上の注意(1)
C仕様編集上の注意(2)
C仕様編集上の注意(3)
C仕様編集上の注意(4)
C仕様編集上の注意(5)
文章:
今日は引き続き、C 仕様編集者のメモの第 6 章を共有します。
早速、見てみましょう。
1. 構造体変数は初期化値を指定せずに初期化してはならず、構造体変数の各フィールド/要素を初期化する必要があります。
*各要素は明確な識別子を使用して初期化する必要があり、冗長な初期化値はありません。あるいは、宣言で {0} 初期化子を使用することもできます。比較のために 2 つの例を次に示します。
まず悪い例を見てください。
Bad example:
int32_t y[5] = {
1, 2, 3}; /* 此处的初始化具有误导性——实际上,最后两个元素初始化为零 */
int32_t z[2] = {
1, 2, 3}; /* 多初始化一个值 */
int16_t vv[5] = {
[0] = -2, [1] = -9, [3] = -8, [2] = 18 }; /* s错误来源,索引 2 和 3 不是按递增顺序排列的,而 4 被遗忘了 */
struct person {
unsigned char name[20];
uint16_t roll;
float marks;
int grades[10];
};
struct person p1 = {
" ", 0}; /* 模糊定义 */
struct person p2 = {
"toto" ,67 ,78.3 ,{
0} ,12}; /* 12为多初始化的一个变量 */
良い例:
Good example:
int32_t y[5] = {
1, 2, 3, 4, 5 };
int32_t z[2] = {
1, 2 };
int32_t w[3] = {
0 };
/* 以下这种索引值初始化可能比较少见*/
int16_t vv[5] = {
[0] = -2, [1] = -9, [2] = 18, [3] = -8, [4] = 33 }; /* ok */
struct person {
unsigned char name[20];
uint16_t roll;
float marks;
int grades[10];
};
//结构体这种初始化可以参考一下
struct person p1 = {
.name = "titi", .roll = 12, .marks = 10.0f, .note = {
0}};
struct person p2 = {
.name="toto", .roll=67, .marks=78.3 , .grades={
0}};
2. C 標準では、各タイプの整数の明示的なサイズは定義されていません。特に int 型の場合、アーキテクチャに応じて 16、32、または 64 ビットになります。
3. 通常の char 型は数値には使用しないでください。その符号は C 標準では指定されておらず、実装によって定義されているためです。このタイプは文字処理に限定する必要があります。
*ルール — 数値の処理には signed char 型と unsigned char 型のみを使用する必要があるため、整数の処理に char 型を使用する場合は、その前に unsigned を付ける必要があります。
4. 提案 - 型エイリアスを再定義しないでください。たとえば、
型エイリアスを複数回定義するのは良くありません。
Bad example:
/* 这里重复对unsiged short类型进行重定义*/
typedef unsigned short uint16_t;
typedef unsigned short uint16_type;
typedef uint16_t unsigned_short;
良い定義:
Good example:
typedef unsigned short uint16_t;
さて、今日はまずここで共有しましょう~
C仕様編集者ノートの第7回の記事でお会いしましょう~
私のレベルは限られており、上記の情報は学習の参考のみです。間違いや不適切な点があれば、ご指摘ください。
また、作成するのは簡単ではありません、盗用しないでください、皆さんに役立つなら、皆さんに気に入っていただければ幸いです、ありがとう~