なぜ異なる値を印刷するのですか?詳細に説明してください。 1つのファイルは次のとおりです。私はP2とのchar chは同じ値を出力することが期待Cでオブジェクトファイルをリンクする方法は?この特定の状況を説明してください
/* foo6.c */
void p2(void);
int main()
{
char ch = main;
p2();
printf("Main address is 0x%x\n",main);
printf("Char value is 0x%x\n",ch);
return 0;
}
、しかし、彼らは非常に異なる値を印刷している:
/* boo.c */
#include <stdio.h>
char main;
void p2()
{
printf("0x%X\n", main);
}
別のファイルです。 出力は次のとおりです。
0x55
Main address is 0x401110
Char value is 0x10
私はこのような値の背後にある理由を締結することはできません(私は先に述べたように、メインとchar型の値が期待通りに働いたが、p2を出力しない)
'char'はおそらく8ビットであると署名しました。ポインタはおそらく32/64ビットで符号なしです。 Go figure。 – bace1000
"Char"の値が "Main"の最後のバイト(2ニブル)と同じであることに注目してください。つまり、0x10です。 –
1つのオブジェクトファイルでは、mainはcharであり、他方では関数ポインタです。私は2つを結びつけることが定義されているとは思わない。 – PSkocik