編譯頭文件
⑴ C++ 編譯器如何處理頭文件
預處理包括把頭文件的內容在 #include 處展開,也包括處理 #define,當然,還有處理 #if / #ifdef 等等
函數(inline 函數除外)和變數在整個程序中最多隻能定義一次,程序中用到的函數 / 變數必須被定義。這被稱作「一處定義原則」(one-definition rule),是C++的基本規則之一
⑵ c語言中如何編譯頭文件啊
你這是添加頭文件,而不是編譯頭文件
TC2.0裡面沒有滑鼠的使用
添加必須使用#include
命令
一般把你寫的頭文件或文件(注意,不光是頭文件可以加入)放入你的項目或工程文件夾中
然後使用
#include
「文件名.擴展名"
添加文件(注意:使用的是
"
"
而不是<
>
包含
如果你所做要添加的文件是你們公司的一個文件庫里的,建議你更改TC查詢路徑,這樣就能省去要放到同一目錄下的要求。
至於如何編譯
你可以查查TC的運行方式
⑶ c語言中如何編譯頭文件啊
只要在程序開頭加入#include<頭文件名>,在編譯過程當中,頭文件自動會被添加到源文件當中一起進行編譯。
編譯,編譯程序讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。
C源程序頭文件-->預編譯處理(cpp)-->編譯程序本身-->優化程序-->匯編程序-->鏈接程序-->可執行文件。
⑷ 我輸入代碼後,編譯的時候會出現一個頭文件,然後就沒辦法運行,您知道是為什麼嗎
答: 這個問題是這樣的,就是代碼提示你沒有定義變數N,仔細看你自己所在的那個圖片,代碼中提示第490行,有一個變數N,但是在之前沒有提前聲明。
因此當你雙擊這個錯誤的時候,他就會跳轉到一個C語言的頭文件裡面。主要有兩個解決方法如下。
- 檢查是否有定義變數N,如果沒有添加定義即可;
- 已經定義了變數N,但是仍然報錯,這個時候可能是因為你定義的是局部變數,把它放在你的大括弧外面。
希望可以幫助到你呀。
⑸ 關於頭文件編譯
頭文件不能編譯,只能編譯源文件。
源文件預編譯的時候,如果碰到#include <xxx.h>,就把xxx.h中的文本內容全部復制到相應的位置
比如在
cpp中寫
int a[] = {
#include "a.h"
};
在"a.h"中寫
1, 2, 3, 4, 5
是合法的。
預編譯後就是
int a[] = {
1, 2, 3, 4, 5
};
你還可以試驗其他更古怪的#include方法。再結合#define去理解預編譯的意義。
⑹ gcc編譯器頭文件處理
兩次相對比一下,第二次增加了以下函數的實現,這部分是要編譯成機器指令的,所以第二次這部分相當於是增加的。
intprintf(constchar*__format,...)
{
registerint__retval;
__builtin_va_list__local_argv;__builtin_va_start(__local_argv,__format);
__retval=__mingw_vprintf(__format,__local_argv);
__builtin_va_end(__local_argv);
return__retval;
}
那第二次減少了哪些呢?一點都沒有,因為stdio這個頭文件聲明的函數和變數,都是在一個庫中實現的,根本就不會包含在你的exe中,所以加不加stdio頭文件沒有區別。
要想驗證這個也很簡單:代碼1
#include<stdio.h>
intmain(){return0;}
代碼2:
intmain(){return0;}
比較這兩次產生的exe是否一致即可。
注意,不能帶有-g選項,-g選項會生成一些額外的調試信息
⑺ c++中如何編譯頭文件,編譯頭文件的作用,
編譯頭文件的理解竅門,在include語句。
你可以理解為,include就是替換,在編譯的時候,在include的位置完整的將頭文件「嵌入」進去,在cpp文件中共同編譯。如果一個頭文件沒有被任何文件包含(include),那麼它不會編譯。
頭文件,你可以簡單的認為就是「避免重復」,將重復的聲明放在一起,方便代碼閱讀和管理,同時頭文件具有方便介面和安全檢查方面的作用。
⑻ 為什麼C語言頭文件中要用條件編譯
因為 你用的和你看到的頭文件是為開發者方便服務的,不是為你服務的。 有了條件編譯,開發人員可以很方便的為多種情形(比如不同硬體環境,不同軟體環境)維護一套代碼。 發布時原樣發布出來就是你看到的樣子。
你的使用條件和使用環境確定的話,可以去掉條件編譯的,只是需要花時間精力,沒人去干而已。
可以下載嘗試下中文版的C語言:習語言, 頭文件里很少條件編譯。
⑼ 關於在linux下用gcc編譯頭文件的問題。
我用一個例子來告訴你怎麼樣在 C++ 里使用C的頭文件/函數。
比方說我有一個C的頭文件叫 c.h, C的源碼文件叫 c.c,內容分別是
c.h:
#ifndef _ASDFD_INCLUDED_
#define _ASDFD_INCLUDED_
#include <stdio.h>
extern int test(int a);
#endif
c.c:
#include "c.h"
int test(int a)
{
printf("A = %d\n", a);
return a*a;
}
現在我想在c++中使用c.c中提供的函數test(),我的c++文件名字叫 a.cpp,那麼裡面跟C有關的部分就要用 extern "C" {} 大括弧括起來,看看我的
a.cpp:
#include <iostream>
using namespace std;
extern "C"
{
#include "c.h"
}
int main()
{
int b = 12;
b = test(b);
cout<<"b = "<<b<<endl;
return 0;
}
看到了吧,#include "c.h" 被 extern "C" {}括起來了。
然後是如何編譯,先把C文件編出目標文件(.o)來
gcc -c c.c
你會看到生成了 c.o,其實,有目標文件就夠了,如果你一定要做成(靜態/動態)庫文件,也是可以的,不過我這里就不深入了,做成庫和直接用目標文件對解決你的問題沒有任何區別。
然後再編譯C++文件,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在編譯 a.cpp 的時候把C生成的 c.o也加上了。 然後生成 可執行的 hello, 運行
./hello
就可以看到
A = 12
b = 144
關於創建靜態庫,假定你有3個C文件, a.c, b.c, c.c 提供了你C++要用到的介面,那麼可以把這三個C文件編譯出來的目標文件放到一個庫文件里供C++使用,方法為
先編譯出目標文件
gcc -c a.c b.c c.c
這時候你應該看到有 a.o b.o c.o了
然後創建庫文件
ar cr libtest.a a.o b.o c.o
這三個目標文件就放入 libtest.a 這個靜態庫中了,然後編譯C++程序 (你的C++程序應該已經按照我前面說的用 extern "C" 把C的介面都括起來了),假定你的 libtest.a 放在 /home/aaa/lib下
g++ -o my.exe my.cpp -L/home/aaa/lib -ltest
就會生成可執行文件 my.exe了。
⑽ Objective c中,linux下gcc 編譯頭文件的命令是什麼
預處理對頭文件、宏定義等進行處理,生成
.i
的默認文件,命令:gcc
-E
test.c>test.i