C 仕様編集者のメモ (13)

以前の記事:

C 仕様編集上の注意 (1)
C 仕様編集上の注意 (2)
C 仕様編集上の注意 (3)
C 仕様編集上の注意 (4) C 仕様編集上の注意 (
5)
C 仕様編集上の注意 (6)
C 仕様編集上の注意 (7)
C仕様編集時の注意事項 (8)
C 版仕様編集時の注意事項 (9)
C 版仕様編集時の注意事項 (10)
C 版仕様編集時の注意事項 (11)
C 版仕様編集時の注意事項 (12)

文章:

今日は、C 仕様編集ノートの 13 番目の記事を更新します。最近、私の更新速度が速くなったことに友人が気づいたかもしれません。はは、主な理由は、これらのノートが初期段階で準備されたことですが、は csdn に書かれていません。加えて最近の休暇もあり、1 日に 1 つの記事を更新することもできます。また、長々とした記事による疲労を防ぐために、各記事は主に短くしています。

さて、早速、直接お話しましょう〜

1. sizeof 演算子は、オブジェクトのサイズではなく、メモリで使用されているサイズを返しますケースは次のとおりです。

typedef struct s_example {
    
    
    uint32_t ui_field1;
    uint8_t ui_field2;
} t_example;


int32_t isize = sizeof(t_example); /*  对于 32 位对齐,sizeof 返回的值为 8 ,所以sizeof返回的是内存中使用的大小*/

而使用了#pragma pack(push , 1) /* 1 字节对齐 - 非标准 */
isize = sizeof(t_example); /*sizeof 返回的值为 5,因为该结构是使用 1 字节对齐声明的*/

2. ルール - メモリ割り当ての成功に関して必須の検証を実行することをお勧めしますたとえば次のような場合です。

Bad example:
point_t *p_point;
p_point = (point_t *)malloc(sizeof(point_t));
/* 没有检查函数返回 */
p_point ->x = 0.0f;
p_point ->y = 0.0f;


Good example:

point_t *p_point = NULL;
p_point = (point_T *)malloc(sizeof(point_t));
if (NULL != p_point)  /*这里对p_point是否为空指针做了判断*/
{
    
    
    p_point ->x = 0.0f;
    p_point ->y = 0.0f;
} else {
    
    
    /* 内存分配没有成功的错误处理 */
}在这里插入代码片

***さらに、メモリ領域をその目的に関連付ける必要があります。異なる値を表すデータは別々のメモリ空間に保存されます。共有メモリ領域が再利用される場合は、再利用する前に必ず消去してください。プログラムがこれらのデータにアクセスする必要がなくなったら、機密データを含むすべてのメモリ領域を明示的に削除する必要があります。

3. ルール – 値を変更する標準ライブラリ関数を実行する前後に、errno の値を初期化して調べます

errno エラー コード: システムの最後のエラー コードを記録します。
errno は、ライブラリ関数が失敗した場合にのみ設定されます。関数が正常に実行されると、errno の値は変更されません。これは、errno の値をテストしてもエラーが存在するかどうかを判断できないことを意味します。逆に、呼び出された関数がエラーの発生を示している場合にのみ、errno の値をチェックすることは意味があります。

したがって、一部のライブラリ関数はエラー結果をエラーとして保存します。具体的なアプリケーション コードの比較は次のとおりです。

Bad example:
#include <stdlib.h>
void try1 (const unsigned char * len)
{
    
    
    unsigned long res;
    res = strtoul(len,NULL ,5); /* 将字符串转换为 unsigned long */
    /* 函数 strtoul 写入 errno */
    if (res == ULONG_MAX)
    {
    
    
        /* 问题管理 */
    }
    ...
}

Good example:
#include <stdlib.h>
#include <errno.h>
void try1 (const unsigned char * len)
{
    
    
    unsigned long res;
    errno = 0; /* init errno */
    res = strtoul(len,NULL ,5); /* 将字符串转换为 unsigned long */
    /* 用 errno 写的 strtoul */
    if (res == ULONG_MAX && errno != 0) /* 错误阅读 */
    {
    
    
        /* 问题管理 */
    }
    ...
}

*** さらに、C 言語には、さまざまなエラー タイプを示す特別なエラー コード (0 ~ 127) があります。

さて、第 13 回の C 仕様編集者のメモ共有はこれで終わりです。また、第 14 回 (最後) の記事でお会いしましょう~

ここに画像の説明を挿入

私のレベルは限られており、上記の情報は学習の参考のみです。間違いや不適切な点があれば、ご指摘ください。
また、作成するのは簡単ではありません、盗用しないでください、皆さんに役立つなら、皆さんに気に入っていただければ幸いです、ありがとう~

おすすめ

転載: blog.csdn.net/OMGMac/article/details/128746316