ANSI C和Glib C區別

glibc和libc都是Linux下的C函數庫,
libc是Linux下的ANSI C的函數庫;
glibc是Linux下的GUN C的函數庫;

1.ANSI C: 美國國家標準學會(American National Standards Institute)
C是基本的C語言函數庫,包含了C語言最基本的庫函數。
//脫離glibc的demo.c
#include<stdio.h>
int main()
{
   printf("hello world\n");
   return 0;
}
# gcc demo.c

2.Glib C:GNU自由軟件組織
 而GNUC函數庫是一種類似於第三方插件的東西,由於Linux是用C語言寫的,所以Linux的一些操作是用C語言實
現的,所以GUN組織開發了一個C語言的庫用於我們更好的利用C語言開發基於Linux操作系統的程序。其實我們可
以把它理解爲類似於Qt是一個C++的第三方函數庫一樣。不過現在的不同的Linux的發行版本對這兩個函數庫有不
同的處理方法,有的可能已經集成在同一個庫裏了,例如Ubuntu就只有glibc。

 C語言自身並沒有提供IO,內存管理,字符串操作等類似的機制。作爲彌補,C語言有一個標準庫幫助C語言實現
這些機制。我們在編譯C程序的時候基本上都需要鏈接到這些庫文件。

 GNU C Library定義ISO C標準還有其他一些標準(POSIX)規定的函數庫。

//glibc demo.c
static gint repeats = 2;
static gint max_size = 8;
static gboolean verbose = FALSE;
static gboolean beep = FALSE;
static gboolean rand = FALSE;
static gchar *string;
static GOptionEntry entries[] =
{
  { "repeats", 'r', 0, G_OPTION_ARG_INT, &repeats, "Average over N repetitions", "N" },
  { "max-size", 'm', 0, G_OPTION_ARG_INT, &max_size, "Test up to 2^M items", "M" },
  { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL },
  { "beep", 'b', 0, G_OPTION_ARG_NONE, &beep, "Beep when done", NULL },
  { "rand", 0, 0, G_OPTION_ARG_NONE, &rand, "Randomize the data", NULL },
  { "str_test", 's', 0, G_OPTION_ARG_STRING, &string, "test the stirng", NULL},
  { NULL }
};

int main (int argc, char *argv[])
{
  GError *error = NULL;
  GOptionContext *context;
  context = g_option_context_new ("- test tree model performance");
  g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
  // g_option_context_add_group (context, gtk_get_option_group (TRUE));
  if (!g_option_context_parse (context, &argc, &argv, &error))
    {
      g_print ("option parsing failed: %s/n", error->message);
      exit (1);
    }
  /* ... */
}

//GOptionEntry的結構定義爲:
typedef struct {
  const gchar *long_name;  // 完整命令 如:--name
  gchar        short_name;    // 簡寫命令 如:-n
  gint         flags;           // GOptionFlags枚舉的值
  GOptionArg   arg;    // GOptionArg枚舉的值
  gpointer     arg_data; // 解析出來的數據,所要存儲的位置
  
  const gchar *description;  // 參數描述,--help可以查看到
  const gchar *arg_description; 
} GOptionEntry;


//編譯
# gcc test.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
-L/usr/lib/x86_64-linux-gnu -lglib-2.0 -o test
# ./test -r 10 -b -s test
注意:
-b後面不能跟參數,因爲這個參數類型爲:G_OPTION_ARG_NONE。存儲它的變量是一個bool型的值,當有這個
參數的值,這個bool值是TRUE,否則是FALSE。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章