次のコード行に出くわしました:
memcmp(mac, (char []){0x01,0x00,0x5E}, 3)
うまくいくかもしれません。上記の方法で memcmp をコーディングしても問題ありませんか? ありがとう。
次のコード行に出くわしました:
memcmp(mac, (char []){0x01,0x00,0x5E}, 3)
うまくいくかもしれません。上記の方法で memcmp をコーディングしても問題ありませんか? ありがとう。
はい、動作します。問題ありません。次と同じです。
char arr[] = {0x01,0x00,0x5E};
memcmp(mac, arr, 3);
はい、大丈夫です。このように匿名で配列を宣言することを「複合リテラル」と呼びます。これは、C99 標準で C 言語に導入された機能であり、標準に準拠するすべてのコンパイラで動作します。Visual C++ などの非標準コンパイラでは機能しません。
ただし、 として宣言することを検討する必要があります。これは、コンパイラ/リンカーが配列をスタックではなく静的 ROM に配置しやすくする可能性があるためconst char
、より正確であり、最適化も向上する可能性があります。const
In this context, an array doesn't really differ in any regard from a pointer (keyword "array-to-pointer decay").
Since C lets you define temporary arrays in this fashion, you are allowed to use this notation to test a bunch of values that are known at compile time to be in your mac
array.