當前位置:首頁 » 編程語言 » c語言包含頭文件如何gcc
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言包含頭文件如何gcc

發布時間: 2022-10-08 06:57:20

A. c語言模擬命令行調用GCC編譯器編譯一個.c文件

包含<stdlib.h>頭文件,調用的時候用
system("gcc
-o
yourfile
yourfile.c");
就可以了。
參考http://..com/link?url=BevN1jtqwLRE6WRKSJ3HpGp7_t4Z5J--5B4xvZObLoYws0JVfdkE35X_

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

1、只要在程序開頭加入#include
「自定義頭文件名」,在編譯過程當中,頭文件自動會被添加到源文件當中一起進行編譯。
2、編譯,編譯程序讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。C源程序頭文件-->預編譯處理(cpp)-->編譯程序本身-->優化程序-->匯編程序-->鏈接程序-->可執行文件。

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

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

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

D. gcc如何編譯運行c語言程序

  1. 用vim編輯器寫完代碼,給該文本命名為名稱.c,名稱任意取,比如hello,c保存。

  2. 終端打開,切換當前路徑,PS:一般情況下就是在當前路徑。

  3. 輸入:gcc hello.c -o a.out

  4. 執行代碼:./a.out

E. 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選項會生成一些額外的調試信息

F. 關於在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了。