我嘗試移植到64位的C源代碼在32位環境中沒有任何警告地運行。當我在64位Linux環境中編譯GCC(Ubuntu的4.4.1-4ubuntu9)4.4.1編譯,它顯示下面的警告主要是:移植C編寫的32位源代碼到64位
warning: cast to pointer from integer of different size
的上述警告是最。我用uintptr_t類型和大多數這些警告被刪除。我可以使用uintptr_t將類型int/unsigned int更改爲64位有利。但我怎麼能更改以下類型進行兼容64位:
typedef void* POINTER;
我已經改變了下面的代碼:
typedef unsigned int ABC;
到
typedef uintptr_t ABC
我有以下警告:
warning: passing argument 2 of ‘function’ from incompatible pointer type
note: expected ‘ABC *’ but argument is of type ‘unsigned int *’
Mor eover,改變類型定義爲uintptr_t的較早前int或unsigned int類型後,我遇到大部分的警告如下:
warning: inlining failed in call to ‘abc_StringCopy’: call is unlikely and code size would grow
功能tptp_StringCopy如下:
static __inline__ char* abc_StringCopy(void)
{
char *copy;
copy = (char*)Malloc(yyleng+1);
strcpy(copy, yytext);
return copy;
哪有我擺脫了這些警告?
gcc 4.3.3在64位Slackware說unsigned long int是8個字節,它等於指針的大小。 – 2010-03-06 21:48:34
你似乎無法理解「int *」和「int」之間的區別。簡單地消除編譯器警告不會讓你通過移植應用程序,你需要更好地理解C,所以你可以理解你在做什麼。 – mctylr 2010-03-06 22:13:51