1. 程式人生 > >getopt(win32) -- 命令列引數解析函式

getopt(win32) -- 命令列引數解析函式

GNU libc提供了getopt和getopt_long用於解析命令列引數,很好用,想在windows下使用,就google了幾個win32下的C/C++寫得getopt,並作了一些比較。

程式裡往往會有許多開關的,執行時就要傳入許多引數值來開啟或關閉這些開關。以前,每寫一個程式就要花一些精力來寫這段程式碼,因為是給自己用,就比較偷懶,寫得很醜陋,時間長了,自己再回過頭來用自己的東西的時候,心裡罵了一遍又一遍,真tmd挫。

最近終於無可忍受了,決定自己寫一個解析命令列引數的函式。但本著不重複製造車輪的哲學(其實是想偷懶:)),於是google了一把getopt。找到幾個windows下可以用的getopt程式:

Pete Wilson寫的getopt 行為和GNU libc中的getopt一樣。可惜沒有提供getopt_long的win32版本。編譯這個程式要開啟巨集WIN32。

free getopt 宣稱是獨立於系統的。也沒有提供getopt_long。與GNU libc的getopt行為有一些區別,比如


>test in1 in2 -o out
這裡in1不會被解析。

>test in2 in1 -o out
這裡in2不會被解析。

FreeDOS下的GETOPT_L 用/作為選項的字首,用=給選項賦值,支援長引數。不過會將某個non-option argument後面所有的arguments視為一個non-option argument,比如

>test.exe yan /x=xie
這裡"yan /x=xie"會被當作一個non-option引數。

xgetopt getopt的桌面demo程式。不支援長引數。也會將某個non-option argument後面所有的arguments視為一個non-option argument。


相關推薦

getopt(win32) -- 命令引數解析函式

GNU libc提供了getopt和getopt_long用於解析命令列引數,很好用,想在windows下使用,就google了幾個win32下的C/C++寫得getopt,並作了一些比較。 程式裡往往會有許多開關的,執行時就要傳入許多引數值來開啟或關閉這些開關。以前

命令引數解析函式--getopt

原型: #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); 該函式的argc和argv引數通常直接從main()的引數直接傳遞而來。opt

linux命令引數解析函式 getopt

在學習開原始碼過程中,經常遇到命令列解析函式 getopt,網上查閱了一些資料,總結一下。 說到命令列解析,最簡單的方式就是利用c語言main函式的兩個引數argc和argv來實現,當 C 執行時庫程式啟動程式碼呼叫 main() 時,會將命令列的引數傳過來,引數個數放在a

命令引數解析函式getopt_long() 使用詳解

當一個用C語言編寫的Linux或UNIX程式執行時,它是從main函式開始的。對這些程式而言,main函式的宣告如下所示: int main(int argc, char *argv[]) 其中argc是程式引數的個數(int),argv是一個代表引數自身的

getopt_long()----命令引數解析函式使用詳解

為什麼需要命令列解析函式? 當一個用C語言編寫的Linux或UNIX程式執行時,它是從main函式開始的。函式宣告可以如下: int main(int argc, char *argv[]) 其中argc是程式引數的個數,argv是一個代表引數自身的字串陣列。無論作業系統何

linux開發 -- 命令引數解析 getopt

linux大部分工具都是以命令列方式執行,因此都需要對命令列引數解析,它們大多都是用相同的解析方法!(有點廢話)再次記錄下來!省得以後再查。大部分軟體都是用getopt系列函式解析命令列,glibc中就提供了該函式的實現,即使沒有依賴glibc,其他軟體包也會提供相應的實現。

命令選項解析函式(C語言):getopt()、getopt_long()和getopt_long_only

上午在看原始碼專案 webbench 時,剛開始就被一個似乎挺陌生函式 getopt_long() 給卡住了,說實話這函式沒怎麼見過,自然不知道這哥們是幹什麼的。於是乎百度了一番,原來是處理命令列選項引數的,的確,正規點的大型程式一般第一步就是處理命令列引數

C++ 命令引數解析

文章目錄 說明 短引數之 getopt() 長引數之 getopt_long() 長引數之 getopt_long_only() 說明 主要參考以下部落格: 部落格一:getopt和g

【tensorflow】命令引數解析

1. tf.app.flags,用於支援接受命令列傳遞引數 import tensorflow as tf #第一個是引數名稱,第二個引數是預設值,第三個是引數描述 tf.app.flags.DEFINE_string('str_name', 'def_v_1',"descrip1")

golang命令引數解析

package main import ( "fmt" "os" ) func main(){ s:= os.Args fmt.Println(s) }   直接執行 輸出結果:[C:\Users\Administrator\AppData\Local\Temp\___go_bui

python命令引數解析

一、getopt模組  getopt.getopt(args, options[, long_options]) args為需要解析的命令列引數列表,一般為sys.argv[1:],這是因為argv[0]為指令碼的路徑。 options為希望識別的引數,如果該命令列引數

python 命令引數解析 argparse簡單分析

在python 2.7 後,不推薦使用 optparse, 而推薦使用 argparse. 其它的不多說,簡單的分析下我遇到的問題:我是想用 argparse 來解析不定長的命令列引數 例如: import argparse import sys parser = ar

命令引數解析

對這種主函式形式一直不是很瞭解,今天研究了一下,所得如下: 當我們成功執行一個程式時,在Windows環境下會生成一個exe檔案,我們可以再命令列中開啟並執行這個程式。 比如說如下程式碼。 #

Golang: 使用flag包進行命令引數解析

最近在使用go開發cli(command-line-interface)時,通過對於官方文件以及他人部落格的學習,在此寫下個人認為更適合自己往後回顧的關於flag的使用說明。 工欲善其事必先利其器,先奉上flag官方文件解析 Demo0: pack

ffmpeg 原始碼學習 -- 之命令引數解析

ffmpeg 原始碼學習 -- 之ffmpeg命令列引數解析 大家通過git在安裝好cygwin之後,下載原始碼到(cygwin)home目錄,通過./configure  ...... ,可以新增一堆引數選項,執行可以生成config.mk等編譯使用的檔案,通過命令對工

Tensorflow:tf.app.run()與命令引數解析

首先給出一段常見的程式碼: if __name__ == '__main__': tf.app.run()12 它是函式入口,通過處理flag解析,然後執行main函式(或者接下來提到的xxx())(最後含有tf.app.run()的檔案,在此行之前肯定能找到def main

Python命令引數解析模組argparse

當寫一個Python指令碼時經常會遇到不同引數不同功能的情況,如何做一個更好看的命令幫助資訊以及對命令引數解析呢? 這就需要使用argparse模組 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import os impor

C 語言命令引數解析

C語言原始碼必須有且只有一個的函式是main函式,我們知道函式可以有引數,那麼main函式有沒有引數呢? 顯然是有的,而且它是固定的,只有兩個,第一個是整型變數(argc),第二個是字元型指標陣列(a

gflags(google開源的一套命令引數解析工具)

gflags是google開源的一套命令列引數解析工具,比getopt()函式功能要強大,使用起來更加方便,gflags還支援從環境變數和配置檔案中讀取引數。目前有C++和Python版本。本文就來詳細介紹C++版本gflags的使用,主要分如下兩個部分 Cont

一個命令引數解析

    因工作需要寫一個console工具程式,執行引數很多,記得linux下有一個系統函式getopt可以很好得幫助程式設計師解析命令列引數,但是在VC中沒有這個函式,研究了下linux中對該函式的幫助資訊和標頭檔案g