當前位置:首頁 » 編程軟體 » 小頭編譯

小頭編譯

發布時間: 2023-02-04 18:26:15

c語言含有包含自定義頭文件的程序怎麼編譯

1、只要在程序開頭加入#include 「自定義頭文件名」,在編譯過程當中,頭文件自動會被添加到源文件當中一起進行編譯。

2、編譯,編譯程序讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。C源程序頭文件-->預編譯處理(cpp)-->編譯程序本身-->優化程序-->匯編程序-->鏈接程序-->可執行文件。

❷ eclipse用來編譯的小榔頭不見了,怎麼設置

  • 首先,我們打開一下Eclipse,我這里由於用了結合Android sdk的 版本,界面可能不一樣。

❸ Little-Endian的JAVA

JAVA位元組序
BIG-ENDIAN、LITTLE-ENDIAN跟多位元組類型的數據有關,比如int,short,long型,而對單位元組數據byte卻沒有影響。BIG-ENDIAN就是低位位元組排放在內存的高端,高位位元組排放在內存的低端。而LITTLE-ENDIAN正好相反。
比如 int a = 0x05060708
在BIG-ENDIAN的情況下存放為:
位元組號 0 1 2 3
數據 05 06 07 08
在LITTLE-ENDIAN的情況下存放為:
位元組號 0 1 2 3
數據 08 07 06 05
BIG-ENDIAN、LITTLE-ENDIAN跟CPU有關,每一種CPU不是BIG-ENDIAN就是LITTLE-ENDIAN。IA架構的CPU中是Little-Endian,而PowerPC 、SPARC和Motorola處理器則是BIG-ENDIAN。這其實就是所謂的主機位元組序。而網路位元組序是指數據在網路上傳輸時是大頭還是小頭的,在Internet的網路位元組序是BIG-ENDIAN。所謂的JAVA位元組序指的是在JAVA虛擬機中多位元組類型數據的存放順序,JAVA位元組序也是BIG-ENDIAN。
所以在用C/C++寫通信程序時,在發送數據前務必用htonl和htons去把整型和短整型的數據進行從主機位元組序到網路位元組序的轉換,而接收數據後對於整型和短整型數據則必須調用ntohl和ntohs實現從網路位元組序到主機位元組序的轉換。如果通信的一方是JAVA程序、一方是C/C++程序時,則需要在C/C++一側使用以上幾個方法進行位元組序的轉換,而JAVA一側,則不需要做任何處理,因為JAVA位元組序與網路位元組序都是BIG-ENDIAN,只要C/C++一側能正確進行轉換即可(發送前從主機序到網路序,接收時反變換)。如果通信的雙方都是JAVA,則根本不用考慮位元組序的問題了。
如果網路上全部是PowerPC,SPARC和Motorola CPU的主機那麼不會出現任何問題,但由於實際存在大量的IA架構的CPU,所以經常出現數據傳輸錯誤。
文章開頭所提出的問題,就是因為程序運行在X86架構的PC SERVER上,發送數據的一端是用C實現的,接收一端是用JAVA實現的,而發送端在發送數據前未進行從主機位元組序到網路位元組序的轉換,這樣接收端接收到的是LITTLE-ENDIAN的數據,數據解釋自然出錯。
具體數據如下,實際發送的數據為23578
發送端發送數據: 1A 5C
接收端接收到數據後,按BIG-ENDIAN進行解釋具體數據是多少?你們自己去計算並比較吧!
===============================================================================================
Big Endian and Little Endian
談到位元組序的問題,必然牽涉到兩大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列採用big endian方式存儲數據,而x86系列則採用little endian方式存儲數據
為什麼要注意位元組序的問題呢?你可能這么問。當然,如果你寫的程序只在單機環境下面運行,並且不和別人的程序打交道,那麼你完全可以忽略位元組序的存在。但是,如果你的程序要跟別人的程序產生交互呢?尤其是當你把你在微機上運算的結果運用到計算機群上去的話。在這里我想說說兩種語言。C/C++語言編寫的程序里數據存儲順序是跟編譯平台所在的CPU相關的,而JAVA編寫的程序則唯一採用big endian方式來存儲數據。試想,如果你用C/C++語言在x86平台下編寫的程序跟別人的JAVA程序互通時會產生什麼結果?就拿上面的 0x12345678來說,你的程序傳遞給別人的一個數據,將指向0x12345678的指針傳給了JAVA程序,由於JAVA採取big endian方式存儲數據,很自然的它會將你的數據翻譯為0x8765431。什麼?竟然變成另外一個數字了?是的,就是這種後果。因此,在你的C程序傳給JAVA程序之前有必要進行位元組序的轉換工作。
Big-Endian和Little-Endian優缺點
Big-Endian優點:靠首先提取高位位元組,你總是可以由看看在偏移位置為0的位元組來確定這個數字是正數還是負數。你不必知道這個數值有多長,或者你也不必過一些位元組來看這個數值是否含有符號位。這個數值是以它們被列印出來的順序存放的,所以從二進制到十進制的函數特別有效。因而,對於不同要求的機器,在設計存取方式時就會不同。
Little-Endian優點:提取一個,兩個,四個或者更長位元組數據的匯編指令以與其他所有格式相同的方式進行:首先在偏移地址為0的地方提取最低位的位元組,因為地址偏移和位元組數是一對一的關系,多重精度的數學函數就相對地容易寫了。
如果你增加數字的值,你可能在左邊增加數字(高位非指數函數需要更多的數字)。因此,經常需要增加兩位數字並移動存儲器里所有Big-endian順序的數字,把所有數向右移,這會增加計算機的工作量。不過,使用Little- Endian的存儲器中不重要的位元組可以存在它原來的位置,新的數可以存在它的右邊的高位地址里。這就意味著計算機中的某些計算可以變得更加簡單和快速。

❹ c語言問題求解!!!!!!!!!!!1

答案是不確定,
因為在PC中你的編譯器int型是4個位元組存儲的,這個可以修改的,上網搜吧;所以輸出是不確定的。
下面是我修改後的程序:
#include "stdio.h"
main()
{union{char i[4];
int k;
}r;
r.i[0]=2;r.i[1]=0;
r.i[2]=0;r.i[3]=0;
printf("%d",r.k);}

輸出結果是2
我用的編譯器是VC6.0
還有就是上面的回答,多位元組存儲時有大頭和小頭之分,就是數據的高位存儲在高地址還是存儲在低地址中。根據實驗結果,數據的低位元組存儲在低地址位中,即小頭
查資料C++中int型在Windows 98、NT、XP、Macintosh OS X、VAX和很多PC中都是32位
可以用sizeof(int)驗證;
你也可以將原來的 int 更換為short,short型是兩個位元組。可以用sizeof(short)驗證

❺ 關於在linux下用gcc編譯頭文件

首先,確定你的頭文件都用宏隔開了,防止了重復定義。例如,在file.h 中的開頭就是
#ifndef __FILE__HEAD___
#define __FILE__HEAD___
//頭文件中的內容
#endif //__FILE__HEAD___
之後,
file.h中用到了list.h ,所以file.h中#include "list.h"//假設頭文件都在同一目錄下
list.h中用到了preapre.h 所以list.h中#include "prepare.h"
prepare.h中用到了node.h 所以prepare.h中#include "node.h"

在某些情況下,由於代碼組織等的問題,還是會出現編譯問題,這個就是代碼組織技巧的問題了,要根據具體代碼具體判斷了。
另外,准確的說頭文件只是在編譯的第一步,預處理的時候使用了,真正被「編」的應該是源文件,這個是編譯原理方面的問題了。

❻ c語言高手進

第一個問題:Union在內存中的樣子是{2,0,0,0},一共四個位元組,前兩個i與k公用,後兩個由於沒有賦值應該是0。然後輸出的時候,把這四個位元組一起作為一個int,注意了問題就在這里:Intel的晶元中,內存中的變數是按從低位到高位排列的,術語叫「小頭在前」,這與人們數學上的習慣不一樣!也就是k在內存中是{2,0,0,0}在邏輯上應該是{0,0,0,2},這個反轉操作是在CPU內部完成的,如果不像你這樣刻意去查看是發現不了的。這是體系結構的問題造成的,如果在Mac機上就不會這樣了。
第二個問題是C的問題:C中聲明在函數形參中的數組會「褪化」成首位指針,就是說void fun(double b[10][22])與void fun(double (*)b[10])是沒有區別的,編譯器會忽略數組大小。正由於這個大小被忽略了,所以教科書上要求在後面的形參中顯式地提供大小,就是void fun(double (*)[10],int m,int n) 這個樣子了。如果函數有其他方法知道數組的大小,那麼後面的形參就不是必要的。

❼ 求一個控制攝像頭小程序的源碼,要求VC下編譯運行

VC-攝像頭控制SDK源碼
#include <windows.h>
#include <stdio.h>
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")

HWND ghWndCap ; //捕獲窗的句柄
CAPDRIVERCAPS gCapDriverCaps ; //視頻驅動器的能力
CAPSTATUS gCapStatus ; //捕獲窗的狀態
char szCaptureFile[] = "MYCAP.AVI";
char gachBuffer[20];

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

LRESULT CALLBACK StatusCallbackProc(HWND hWnd,int nID,LPSTR lpStatusText)
{
if(!ghWndCap)return FALSE;//獲得捕獲窗的狀態
capGetStatus(ghWndCap,&gCapStatus,sizeof(CAPSTATUS));//更新捕獲窗的大小
SetWindowPos(ghWndCap,NULL,0,0,gCapStatus.uiImageWidth,gCapStatus.uiImageHeight,SWP_NOZORDER|SWP_NOMOVE);
if(nID==0){//清除舊的狀態信息
SetWindowText(ghWndCap,(LPSTR)"hello");
return (LRESULT)TRUE;
}//顯示狀態ID和狀態文本
wsprintf(gachBuffer,"Status# %d: %s",nID,lpStatusText);
SetWindowText(ghWndCap,(LPSTR)gachBuffer);
return (LRESULT)TRUE;
}
LRESULT CALLBACK ErrorCallbackProc(HWND hWnd,int nErrID,LPSTR lpErrorText)
{
if(!ghWndCap)return FALSE;
if(nErrID==0)return TRUE;//清除舊的錯誤
wsprintf(gachBuffer,"Error# %d",nErrID);//顯示錯誤標識和文本
MessageBox(hWnd, lpErrorText, gachBuffer,MB_OK | MB_ICONEXCLAMATION);
return (LRESULT) TRUE;
}

LRESULT CALLBACK FrameCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)
{
FILE *fp;
fp=fopen("caram.dat","w");
if(!ghWndCap)return FALSE;//假設fp為一打開的.dat文件指針
fwrite(lpVHdr->lpData,1,lpVHdr->dwBufferLength,fp);
return (LRESULT)TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("HelloWin");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires WindowsNT!"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT("The Hello Program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
{
ghWndCap=capCreateCaptureWindow((LPSTR)"Capture Window",WS_CHILD|WS_VISIBLE,0,0,300,240,(HWND)hwnd,(int)0);
capSetCallbackOnError(ghWndCap,(FARPROC)ErrorCallbackProc);
capSetCallbackOnStatus(ghWndCap,(FARPROC)StatusCallbackProc);
capSetCallbackOnFrame(ghWndCap,(FARPROC)FrameCallbackProc);
capDriverConnect(ghWndCap,0); // 將捕獲窗同驅動器連接
//獲得驅動器的能力,相關的信息放在結構變數gCapDriverCaps中
capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVERCAPS));
capPreviewRate(ghWndCap, 66); // 設置Preview模式的顯示速率
capPreview(ghWndCap, TRUE); //啟動Preview模式
if(gCapDriverCaps.fHasOverlay) //檢查驅動器是否有疊加能力
capOverlay(ghWndCap,TRUE); //啟動Overlay模式
if(gCapDriverCaps.fHasDlgVideoSource)capDlgVideoSource(ghWndCap); //Video source 對話框
if(gCapDriverCaps.fHasDlgVideoFormat)capDlgVideoFormat(ghWndCap); // Video format 對話框
if(gCapDriverCaps.fHasDlgVideoDisplay)capDlgVideoDisplay(ghWndCap); // Video display 對話框
capFileSetCaptureFile( ghWndCap, szCaptureFile); //指定捕獲文件名
capFileAlloc(ghWndCap, (1024L * 1024L * 5)); //為捕獲文件分配存儲空間
capCaptureSequence(ghWndCap); //開始捕獲視頻序列
capGrabFrame(ghWndCap); //捕獲單幀圖像

}

return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello,Windows98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
{
capSetCallbackOnStatus(ghWndCap,NULL);
capSetCallbackOnError(ghWndCap,NULL);
capSetCallbackOnFrame(ghWndCap,NULL);
capCaptureAbort(ghWndCap);//停止捕獲
capDriverDisconnect(ghWndCap); //將捕獲窗同驅動器斷開
PostQuitMessage(0);
}
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:750
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1012
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:719
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:879
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1127
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:351
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:229
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:912
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:876