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

首頁 > 編程 > C > 正文

深入理解C語言中編譯相關的常見錯誤

2020-01-26 16:11:10
字體:
來源:轉載
供稿:網友
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 <string.h>
#include <stdlib.h>
#include <stdio.h>
#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);
}

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲在线观看视频网站| 亚洲色无码播放| 国产精品av电影| 日韩av资源在线播放| 欧美第一淫aaasss性| 亚洲精品福利在线| 亚洲国产一区自拍| 国产在线观看精品| 久久久精品国产亚洲| 91九色国产视频| 精品女厕一区二区三区| 日本精品久久中文字幕佐佐木| 日韩视频―中文字幕| 精品亚洲国产视频| 91理论片午午论夜理片久久| 欧美一级片免费在线| 国产精品91久久久| 日韩欧美亚洲综合| 国产亚洲福利一区| 最好看的2019的中文字幕视频| 亚洲在线免费看| 久久久999国产| 亚洲乱码国产乱码精品精| 日韩av在线不卡| 九九精品在线视频| 国产精品爽黄69| 色诱女教师一区二区三区| 成人高h视频在线| 欧美日韩成人网| 亚洲电影免费观看高清完整版| 欧美亚洲一级片| 国产精品视频内| 成人福利在线观看| 欧美丝袜一区二区三区| 77777少妇光屁股久久一区| 国产亚洲一区二区在线| 555www成人网| 波霸ol色综合久久| 97超碰国产精品女人人人爽| 亚洲精品国产品国语在线| 成人黄色在线免费| 日韩国产精品亚洲а∨天堂免| 中文字幕欧美日韩va免费视频| 国内精品模特av私拍在线观看| 久久精品一区中文字幕| 国产精品久久久久久久电影| 91日韩在线视频| 欧美日韩国产在线看| 日本一区二区不卡| 亚洲欧美另类人妖| 日韩精品免费一线在线观看| 久久久久亚洲精品成人网小说| 亚洲国产中文字幕在线观看| 午夜精品久久久久久99热| 亚洲国产成人在线播放| 国产精品福利网| 狠狠久久五月精品中文字幕| 庆余年2免费日韩剧观看大牛| 91av国产在线| 久久天天躁狠狠躁夜夜躁| 奇门遁甲1982国语版免费观看高清| 日韩在线欧美在线国产在线| 精品精品国产国产自在线| 国产成人aa精品一区在线播放| 萌白酱国产一区二区| 国产视频精品自拍| 国产性猛交xxxx免费看久久| 亚洲男人第一网站| 美女久久久久久久| 91国在线精品国内播放| 97视频在线看| 综合网中文字幕| 久久久久国产精品免费网站| 久久亚洲成人精品| 日产精品久久久一区二区福利| 美女国内精品自产拍在线播放| 57pao成人永久免费视频| 国产精品网站大全| 亚洲一区二区少妇| 欧美日韩中国免费专区在线看| 97精品国产97久久久久久春色| 亚洲欧洲国产伦综合| 一区二区欧美久久| 日韩免费在线免费观看| 亚洲天堂av在线播放| 国产精品中文字幕久久久| 欧美成人免费在线观看| 国产精品久久婷婷六月丁香| 91九色国产社区在线观看| 中文字幕久精品免费视频| 中文字幕亚洲欧美日韩2019| 亚洲综合在线中文字幕| 国产日韩欧美黄色| 国产美女久久精品香蕉69| 91sao在线观看国产| 亚洲成色777777女色窝| 色无极影院亚洲| 黄色精品在线看| 欧美大全免费观看电视剧大泉洋| 欧洲成人午夜免费大片| 日韩视频在线观看免费| 中文字幕日韩专区| 91免费看国产| 久久天天躁狠狠躁老女人| 日韩在线观看网站| 欧美日韩国产综合新一区| 亚洲free性xxxx护士hd| 精品中文字幕久久久久久| 国语自产精品视频在线看抢先版图片| 亚洲国产欧美日韩精品| 国产在线播放不卡| 91免费视频国产| 日韩专区在线观看| 国产精品视频网| 亚洲精品720p| 欧美久久精品午夜青青大伊人| 国产精品一区二区久久国产| 亚洲成人精品在线| 欧美激情a∨在线视频播放| 国产亚洲精品久久久久动| 国产亚洲人成a一在线v站| 欧美老少配视频| 亚洲老司机av| 亚洲精品福利视频| 色777狠狠综合秋免鲁丝| 精品国产福利在线| 国产亚洲成av人片在线观看桃| 97视频在线看| 国产精品草莓在线免费观看| 中文字幕在线亚洲| 欧美床上激情在线观看| 成人网欧美在线视频| 在线日韩第一页| 在线视频免费一区二区| 国产97人人超碰caoprom| 色久欧美在线视频观看| 久久视频国产精品免费视频在线| 亚洲韩国日本中文字幕| 国产精品精品一区二区三区午夜版| 色悠久久久久综合先锋影音下载| 欧美极度另类性三渗透| 国产日韩欧美另类| 国产欧美欧洲在线观看| 欧美疯狂做受xxxx高潮| 国产成人精品视频在线观看| 奇门遁甲1982国语版免费观看高清| 国产精品久久激情| 欧美亚洲激情视频| 亚洲美女精品久久| 亚洲欧美成人精品| 日韩亚洲欧美中文在线| 日韩精品中文字幕在线| 日韩高清免费在线| 2020国产精品视频| 久久精品视频免费播放| 久久999免费视频| 97国产精品人人爽人人做| 欧美成人亚洲成人| 一本色道久久综合狠狠躁篇怎么玩| 国产精品色午夜在线观看| 青草青草久热精品视频在线网站| 久久久www成人免费精品张筱雨| 欧洲永久精品大片ww免费漫画| 庆余年2免费日韩剧观看大牛|