亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

深入了解C語言中常見的編譯錯誤

2020-02-24 14:34:44
字體:
來源:轉載
供稿:網友

對于C語言的癡迷,讓小編我從此走上了編程這條不歸路,在這段職業生涯中,小編也稱得上是C語言的深入了解者,一篇深入了解C語言中常見的編譯錯誤,武林技術頻道的小編在這里獻給各位,我們一起在編程中揮灑青春吧。

1. /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld 返回 1
Reason: no main function in source file
2. to get compile options -I and -l
pkg-config lib
e.g: pkg-config --cflags --libs dbus-1 glib-2.0 dbus-glib-1
gcc -o send-sms send-sms.c `pkg-config --cflags --libs dbus-1 glib-2.0 dbus-glib-1`
3. 如何讓pkg-config找到自己寫的庫
在庫中有一個文件libxxx.pc.in,其中會定義它所提供的頭文件在哪里,有哪些,其庫鏈接方式是怎么樣,庫在哪里,當然這都是庫安裝到系統以后的信息,換句話說,可能對于編譯環境是無意義的。

?

?

復制代碼 代碼如下:

?


prefix=@PREFIX@
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: library name
Description: description goes here
Requires: glib-2.0 gobject-2.0
Version: 0.1
Libs: -L${libdir} -llibrary_name
Cflags: -I${includedir}/some_sub_dir


這個文件定義了安裝后此庫的所有信息,而pkg-config就會讀取此信息。
4. forward declaration and incomplete type
出現這種錯誤的時候通常是由于具體使用了某種類型,但此類型(到使用的時候)還僅有聲明,未有定義。比如說,某個頭文件有如下聲明:

?

復制代碼 代碼如下:

?


#ifndef __POINT_H
#define__POINT_H
typedef struct _Point Point;
#endif


如果包含了此頭文件的文件,可以使用Point去聲明:
??? 1).如聲明函數時的形式參數,void print_point(Point p),注意是聲明函數時,而不是定義函數
??? 2). 聲明指針:Point *p;
但是不能使用Point去定義變量,
??? 1). 如定義變量,Point p;
??? 2). 定義函數時的形參,void print_point(Point p) { ... }
??? 3) .或者為其指針申請內在空間時,Point *point = (Point *) calloc(1, sizeof(Point));
會報出incomplete type的編譯錯誤。因為這個時候需要Notification所占的內存大小和具體的定義形式,但是頭文件中并沒有給出具體的定義,所以編譯器不知道此類型所需要的內存,所以會編譯出錯。
C++中也是如此,為了效率會Forward declaration,也即在使用某個類前,不具體指定其類,而是聲明一個沒有定義的類:
class Point;
Point a;
使用Foward declaration時,也只能用其去聲明,而不能具體使用此類型。
所以,如果要具體使用某個類型時,其所包含的頭文件中必須要有類型的具體定義:

?

復制代碼 代碼如下:

?


#ifndef __POINT_H
#define __POINT_H
typedef struct _Point Point;
struct _Point {
????? int x;
????? int y;
};
#endif
#include "point.h"
Point *n = (Point *) calloc(1, sizeof(Point));
n->x = 1;
n->y = 2;
....


其實原因也很簡單,當令需要某個類型來聲明變量時,不需分配內存,不需要對其進行操作,自然就不用了解其具體的類型定義。但當你使用時,要分配內存時,就必須要了解類型是怎么定義的,否則這些操作無法完成,這自然就需要知道類型的具體定義。
其實,在頭文件中僅聲明類型的目的是為了信息隱藏,也就是不讓調用者知道這個類型具體的定義是什么樣子的,那么就需要像Java/C++中那樣去定義這個類型,
??? 1) 把類型聲明為指針類型:
??? typedef struct Point *Point;
??? 否則調用者還是有可能去定義。
??? 2) 也即在頭文件的對應源文件中封裝操作此類型的所有方法,這樣外界就沒有必要去了解類型是如何定義的了。它想操作時,僅需要調用封裝的方法即可。

典型的實例:
頭文件point.h:

?

復制代碼 代碼如下:

?


#ifndef __POINT_H
#define __POINT_H
typedef struct _Point *Point;
Point make_point();
void print_point(Point point);
void destroy_point(Point p);
#endif


實現源文件:point.c

?

復制代碼 代碼如下:

?


#include
#include
#include
#include "point.h"
struct _Point {
??? int x;
??? int y;
};
Point make_point() {
??? Point point = (Point) calloc(1, sizeof(struct _Point));
??? point->x = 0;
??? point->y = 0;
??? return point;
}
void print_point(Point point) {
??? printf("point %d, %d/n", point->x, point->y);
}
void destroy_point(Point p) {
??? if (p == NULL) {
???????? printf("warning, destroying NULL object");
???????? return;
??? }
??? free(p);
}

深入了解C語言中常見的編譯錯誤,到這里就講解完了,不知你是否已經了解,如果還有不清楚的地方,隨時都可以找小編我聊聊,更多精彩內容,請關注武林技術頻道,我們每天都有更新新內容。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
奇米一区二区三区四区久久| 欧美有码在线观看| 日韩在线观看免费av| 欧美激情中文字幕在线| 夜夜嗨av一区二区三区免费区| 亚洲开心激情网| 久久久久中文字幕| 黄色成人在线免费| 国产成人精品电影| 亚洲欧美在线一区| 国产91在线播放九色快色| 深夜福利91大全| 亚洲天堂网在线观看| 亚洲免费影视第一页| 日本韩国欧美精品大片卡二| 亚洲精品一区二区三区婷婷月| 中文字幕日韩在线观看| www.亚洲男人天堂| 久久久久久久久久久网站| 国产精品一区二区电影| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲综合在线小说| 欧美伊久线香蕉线新在线| 国产精品入口免费视| 欧美亚洲激情在线| 欧美放荡办公室videos4k| 国产精品扒开腿做爽爽爽的视频| 久久91精品国产91久久跳| 亚洲女人天堂成人av在线| 97国产在线视频| 欧美色欧美亚洲高清在线视频| 亚洲娇小xxxx欧美娇小| 日韩中文字幕视频在线| 日韩电影大片中文字幕| 欧美激情在线观看| 欧美大全免费观看电视剧大泉洋| 国产免费成人av| 国产97在线|亚洲| 欧美日韩在线免费观看| 国产精品欧美一区二区三区奶水| 亚洲欧美日韩中文在线| 国产日韩欧美日韩大片| 亚洲第一综合天堂另类专| 亚洲欧美在线第一页| 亚洲人永久免费| 久久精品91久久久久久再现| 欧美成人免费小视频| 成人国产精品日本在线| 亚洲高清福利视频| 51视频国产精品一区二区| 国产精品第二页| 精品在线观看国产| 欧美成人午夜免费视在线看片| 国产精品91在线观看| 欧美激情第三页| 亚洲国产精品视频在线观看| 国产精品扒开腿做爽爽爽男男| 国产美女被下药99| 国产精品美女久久久久久免费| 精品性高朝久久久久久久| 国产精品久久久999| 欧美夫妻性视频| 成人xvideos免费视频| 久久精品男人天堂| 78m国产成人精品视频| 国产精品一区二区三区免费视频| 成人福利网站在线观看11| 午夜精品久久久久久久久久久久| 亚洲欧美制服第一页| 一区二区三区视频在线| 欧美一级黄色网| 亚洲美女久久久| 国产精品第一视频| 亚洲欧美日韩视频一区| 亚洲精品大尺度| 国产精品网址在线| 日本视频久久久| 欧美专区中文字幕| 第一福利永久视频精品| 日韩av影片在线观看| www.日韩不卡电影av| 91精品久久久久久久久| 一区二区三区国产在线观看| 成人欧美一区二区三区黑人| 国产精品视频网址| 国产一区二区三区日韩欧美| 亚洲精品福利在线观看| 激情亚洲一区二区三区四区| 韩剧1988在线观看免费完整版| 色www亚洲国产张柏芝| 91国语精品自产拍在线观看性色| 国产日韩在线精品av| 欧美日韩国产成人在线观看| 亚洲精品福利资源站| 亚洲国产精品va在线看黑人动漫| 韩日欧美一区二区| 中文字幕日韩精品有码视频| 高跟丝袜欧美一区| 精品国产欧美成人夜夜嗨| 欧美精品videosex牲欧美| 国产亚洲欧美另类中文| 亚洲免费视频一区二区| 久久久www成人免费精品| 国产精品自在线| 亚洲综合日韩中文字幕v在线| 国产免费一区二区三区香蕉精| 自拍偷拍亚洲区| 亚洲无线码在线一区观看| 九九久久综合网站| 亚洲欧洲在线免费| 久久影视免费观看| 欧美激情视频一区| 久久国产精品视频| 日韩有码视频在线| 日本午夜精品理论片a级appf发布| 91久久久久久久久久久久久| 清纯唯美亚洲激情| 欧洲中文字幕国产精品| 日韩在线观看免费高清| 亚洲欧洲国产伦综合| 日韩精品视频免费在线观看| 欧美日韩午夜激情| 欧美性感美女h网站在线观看免费| 国产欧美va欧美va香蕉在| 成人h猎奇视频网站| 精品国产成人在线| 欧美亚洲一区在线| 欧美精品一本久久男人的天堂| 国产精品欧美激情| …久久精品99久久香蕉国产| 日本一区二区在线播放| 91美女片黄在线观| 国产精品69久久久久| 成人免费淫片aa视频免费| 亚洲天堂免费视频| 国产欧美日韩精品丝袜高跟鞋| 日本高清不卡的在线| 久久久久久久久久久网站| 成人黄色片网站| 国产97在线|亚洲| 欧美日韩精品在线播放| 亚洲精品成人久久| 在线观看久久av| 中文字幕九色91在线| 欧美性视频网站| 亚洲一区二区三区四区视频| 日本中文字幕久久看| 日韩av在线免费播放| 国产精品一区二区久久| 美女性感视频久久久| 成人免费视频网| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲第一精品自拍| 午夜精品一区二区三区视频免费看| 亚洲有声小说3d| 91国产高清在线| 性色av一区二区咪爱| 久久久久久久久久久人体| 色妞欧美日韩在线| 国产亚洲人成a一在线v站| 中文字幕九色91在线| 亚洲欧洲一区二区三区在线观看| 成人妇女免费播放久久久| 777国产偷窥盗摄精品视频|