日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】二十九 main函数与命令行参数

發布時間:2023/12/10 pytorch 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶深度学习记录】二十九 main函数与命令行参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 main函數的返回值
    • 2 main函數的參數
      • 2.1 main函數的參數的代碼案例分析
    • 3 main函數不一定是程序中第一個執行的函數
    • 4 總結

1 main函數的返回值

  • main函數是操作系統調用的函數
  • 操作系統總是將main函數的返回值作為程序的退出狀態
  • main函數的返回值正常來說是0,如果是其他值,就是錯誤的狀態。

2 main函數的參數

  • 程序執行的時候可以向main函數傳遞參數
  • main函數的參數是可變的,可以有多個參數。

那么如何向main函數傳參數呢?在gcc編譯器下是這樣的:

2.1 main函數的參數的代碼案例分析

  • 代碼 33-3.c
#include <stdio.h>int main(int argc, char* argv[], char* env[]){int i = 0;printf("============== Begin argv ==============\n");for(i=0; i<argc; i++){printf("%s\n", argv[i]);}printf("============== End argv ==============\n");printf("\n");printf("\n");printf("\n");printf("============== Begin env ==============\n");for(i=0; NULL!=env[i]; i++){printf("%s\n", env[i]);}printf("============== End env ==============\n");return 0; }

首先我們要讀懂上述代碼。

  • 編譯運行后,打印的環境變量有點多(gcc 4.4.5):
  • 運行結果為:

============== Begin argv ==============
./a.out
============== End argv ==============
============== Begin env ==============

ORBIT_SOCKETDIR=/tmp/orbit-delphi SSH_AGENT_PID=1922 TERM=xterm
SHELL=/bin/bash
XDG_SESSION_COOKIE=6c560f89cd4609726ff940b800000007-1551066414.182685-1366729942
WINDOWID=65011749 QTDIR=/usr/local/Trolltech
GNOME_KEYRING_CONTROL=/tmp/keyring-whMMzd
GTK_MODULES=canberra-gtk-module USER=delphi
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.7.4/lib:/usr/local/Trolltech/qtcreator-2.4.1/lib:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arj=01;31:.taz=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lz=01;31:.xz=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.rar=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.jpg=01;35:.jpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.axv=01;35:.anx=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.axa=00;36:.oga=00;36:.spx=00;36:.xspf=00;36:
SSH_AUTH_SOCK=/tmp/keyring-whMMzd/ssh
DEFAULTS_PATH=/usr/share/gconf/gnome.default.path
SESSION_MANAGER=local/delphi-vm:@/tmp/.ICE-unix/1891,unix/delphi-vm:/tmp/.ICE-unix/1891
USERNAME=delphi XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
DESKTOP_SESSION=gnome LIBGL_ALWAYS_INDIRECT=1
PATH=/usr/local/Trolltech/Qt-4.7.4/bin:/usr/local/Trolltech/qtcreator-2.4.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
QT_IM_MODULE=xim PWD=/home/delphi/c XMODIFIERS=@im=ibus
GDM_KEYBOARD_LAYOUT=cn LANG=zh_CN.utf8 GNOME_KEYRING_PID=1872
MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path
GDM_LANG=zh_CN.utf8 GDMSESSION=gnome SHLVL=1 HOME=/home/delphi
LANGUAGE=zh_CN:zh GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LOGNAME=delphi
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-G9nxTNqahq,guid=1897c64e05f77bfe7d13058e00000f3e
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
LESSOPEN=| /usr/bin/lesspipe %s WINDOWPATH=7 DISPLAY=:0.0
GTK_IM_MODULE=ibus LESSCLOSE=/usr/bin/lesspipe %s %s
XAUTHORITY=/var/run/gdm/auth-for-delphi-ZsN9VV/database
COLORTERM=gnome-terminal
_=./a.out OLDPWD=/home/delphi
============== End env ==============

  • 雖然上面打印的消息比較多,但是結構很清晰。我們不過多的研究打印的消息,而是關心代碼是怎么樣寫的。

3 main函數不一定是程序中第一個執行的函數

對于gcc編譯器來說,它有一些屬性關鍵字。可以利用這些屬性關鍵字來構造先與main函數執行的函數,或者構造出main函數執行后執行的函數。

直接用代碼說明問題會比較好:

  • 代碼33-4.c
#include <stdio.h>#ifndef __GNUC__ //判斷是否是GNUC編譯器 #define __attribute__(x) #endif__attribute__((constructor)) //gcc屬性關鍵字 void before_main() {printf("%s\n",__FUNCTION__); }__attribute__((destructor)) //gcc屬性關鍵字 void after_main() {printf("%s\n",__FUNCTION__); }int main(){printf("%s\n","main");return 0; }
  • 運行結果如下:

可以看出:

  • 使用gcc屬性關鍵字可以構造先與main函數執行的函數
  • 也可以構造出在main函數執行之后執行的函數
  • 但是這種屬性是依賴于編譯器的,將上述代碼拿到Windows的編譯器運行可能就不對。所以一般不使用編譯器的屬性關鍵字
  • 上述代碼的宏定義部分是判斷當前是否是GNUC編譯器。不是的話,就不支持該屬性,直接頂一個一個空的宏__attribute__(x) ,它在后面的代碼中也就沒有意義了。

4 總結

  • main函數是操作系統調用的函數
  • 現代編譯器支持在main函數前調用其他函數
  • 注意main函數的參數

總結

以上是生活随笔為你收集整理的【C语言进阶深度学习记录】二十九 main函数与命令行参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。