2

次のコード行に出くわしました:

              memcmp(mac, (char []){0x01,0x00,0x5E}, 3)

うまくいくかもしれません。上記の方法で memcmp をコーディングしても問題ありませんか? ありがとう。

4

3 に答える 3

5

はい、動作します。問題ありません。次と同じです。

char arr[] = {0x01,0x00,0x5E};
memcmp(mac, arr, 3);
于 2012-04-17T09:15:37.943 に答える
3

はい、大丈夫です。このように匿名で配列を宣言することを「複合リテラル」と呼びます。これは、C99 標準で C 言語に導入された機能であり、標準に準拠するすべてのコンパイラで動作します。Visual C++ などの非標準コンパイラでは機能しません。

ただし、 として宣言することを検討する必要があります。これは、コンパイラ/リンカーが配列をスタックではなく静的 ROM に配置しやすくする可能性があるためconst char、より正確であり、最適化も向上する可能性があります。const

于 2012-04-17T10:03:24.893 に答える
0

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.

于 2012-04-17T09:43:44.443 に答える