私はQT、C言語で行ったようなことをやろうとしています。 これはC++コードの一部です:Cの文字列で構造体の配列を宣言するエレガントな方法を探してください
typedef struct {
int order;
int type;
QString cmd;
QString res[2];
double timeout;
int exitAfterNChar;
}atCmdList_t;
atCmdList_t atCmdList[] = {
{0,0, "ATI", {"", ""}, 1, -1},
{0,0, "AT+GSN", {"", ""}, 1, -1},
{0,0, "AT+COPS?", {"+COPS: 0,0,\"vodafone IT\",2", ""}, 1, -1}
};
私は、私はこのようsometringないことができることを知っているC. に似た何かを作るしようとしている:
const char s_00[] = {""};
const char s_01[] = {"ATI"};
const char s_02[] = {"AT+GSN"};
const char s_03[] = {"AT+COPS?"};
typedef struct {
int order;
int type;
const char * cmd;
const char * res[2];
double timeout;
int exitAfterNChar;
} atCmdList_t;
atCmdList_t atCmdList[] = {
{0,0, s_01, {s_00, s_00}, 1, -1},
{0,0, s_02, {s_00, s_00}, 1, -1},
....
};
しかし、これはC++の方法として、エレガントかつ明確ではありません。 私の "使命"は、できるだけ多くのコードを読みやすくするプリコンパイラマクロを作成または見つけることです。
提案がありますか?そのまま、&s_00
ポインタツーCONST-CHAR(const char*
)が、ポインタへのポインタツーCONST-CHAR(const char**
)ではない、ためs_00
があるため
申し訳ありませんが、私はCコードをチェックしたり、制御したり、コンパイルしていません。 :)私のせい。 しかし、特にC++コードのエラーを私に指摘するためのヒントをありがとう。 私の要求は、このタイプのC++コードをC言語で書いた方がよりわかりやすい方法を探すことであり、もっとも読みやすくするためです。 – Katte
@ user11804私は代わりのおもちゃの例を与えました。 – user268396
あなたのお返事ありがとうございます。 これは良い方法ですが、私のせいで、私は数kbのRAMしか持たないアームプロセッサのコードを書いているとは言及していません。 これは、大量のRAMを持つシステム(例えば、pcやlinuxを実行するボード)に適しています。 私の場合、mallocの使用はあまり良くありません。最良の方法は、マイクロプロセッサのフラッシュメモリに文字列を直接書き込ませ、必要な場合にのみRAMバッファにmemcpyを作成することです。これは、実行時に文字列をRAM上に置く関数ではなく、プリプロセッサマクロを使用する理由です。 – Katte