私はこのように、デバイスからの32ビット値のバイナリ配列を受け取り、vsprintfのでそれらを印刷コードを有する:変数のリストを移植性の高い方法でvprintfに渡すには?
void print_stuff(int32_t *p, const char *format)
{
vprintf(format, (va_list)p);
}
(これは単純化され、値がフォーマットと一致することを保証だ、等)
これは、通常、x86 x86ではva_listが単なるポインタ(または配列)であることに依存しています。これは警告なしでコンパイルします。
これをARM(arm-linux-gnueabihf)とx64に移植する必要があります。コンパイルもしません。 ARMのGCC 4-somethingは「エラー:非スカラー型への変換要求」
バイナリ配列から移植可能な方法でva_listを作る方法は?または、少なくとも32ビットと64ビットのアーチを別々にすることは可能ですか? "ネイティブ・コール・インタフェース"ライブラリなしで可能ですか? これが不可能な場合は、このタスクに適した他の標準またはGNUライブラリ関数がありますか?これを呼び出すコードの
例:
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#ifndef __GNUC__
#error Only Linux, other platforms/compilers not needed
#endif
int main() {
uint32_t data[10];
int i;
const char *fmt = "%x %x %x %x\n";
// Simulation of reading the data
for(i = 0; i < 10, i++) data[i] = 0x100 + i;
print_stuff(data, fmt);
return 0;
}
なぜあなたも、あなたが明確に行うことになっていない何かをしますか?誰がこのコードを最初に書きましたか?その人は非常に厳しい言葉に値する! –
親愛なる人なので、実際には締め切りなどがあります。そして、これを正しくコーディングする方法を正確に尋ねています。 – ddbug
締め切り?私はあなたがミスを間違えたと思います。あなたがとても賢いと思って、すべてが分かったと思うときは、ティーンエイジャーとしてこれを行うのは楽しいことです。その後、最初の移植性の問題にぶつかり、賢明にならなくなります。 – Art