C++main()函數知識點

1. c/c++在main函數之前和之後會做什麼?

底層彙編代碼:

int stack;    //初始化棧;
int heap;     //初始化堆
open stdin;    //打開標準輸入
open stdout;    //打開標準輸出
open stder;    //打開錯誤流
...
push argv;    //把參數argv壓入棧
push argc;    //把參數argc壓入棧;
call main;    //調用main函數
...
destroy heap;    //銷燬內存
close stdin;    //關閉標準輸入
close stdout;   //關閉標準輸入
close stderr;    //關閉錯誤流
...

call __exit;

2. main()函數的參數

c++標準允許主函數main()沒有參數,或有兩個參數。 

int main(int argc, char* argv[])

//或者

int main(int argc, char** argv)

 argc 表示傳入main函數的參數個數,也可理解爲數組argv的元素個數。

 argv表述傳入main函數的指針數組,爲char**類型,也可以爲是一個argv是一個數組,數組中的每一個元素都是一個字符串。

argv的第一個元素argv[0]是程序名稱,並且包含程序的完整路徑。所以,argc至少爲1。

#include "stdafx.h"
#include <gtest\gtest.h>

#include <iostream>
using namespace std;
int main(int number, char* inputParameters[])
{
	for (int  i = 0; i < number; i++)
	{
		cout << inputParameters[i] << endl;
	}

	system("pause");
}

運行結果: 

注:一般編譯器默認argc和argv爲main函數的參數,但只要保證第一個參數爲int,第二個爲char**, 符合c++命名規範的變量名都可以作爲main函數的參數。

3. 如何爲main()函數傳遞參數

a. 使用命令行指令

由於main函數不能被其他函數調用,因此不能再程序內部取得實際值,main()函數的參數是從操作系統命令行上獲得的。

上文代碼編譯後可生成可執行文件gtest_example1.exe, 在命令提示符中,鍵入如下命令:可執行文件名 參數1  參數2  參數3 ...

文件名:D:\gtest_example1.exe

參數1:aaa;

參數2:  bbb;

b. 使用VS編譯器

在VS編譯器下,右擊工程名,選擇屬性選項, configuration Properties->Debugging->Command Arguments,在右側輸入兩個字符串,“hello” 和“world“ 用空格隔開。但此方法只適用於debug調試時。

4. main()函數的第三個參數

 一般情況下,我們用到的main()函數只含有兩個參數,但是查看MSDN,可選的原型爲

int main(int argc, char* argv[], char* envp[])

envp 中存放着系統的環境變量,每一個元素都是key=value 的形式。envp 是以null結束的。下面這段代碼打印出了envp中的所有值。

#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[], char* envp[])
{
	for (int  i = 0; i < argc; i++)
	{
		cout << argv[i] << endl;
	}

	for (int i = 0; envp[i] != NULL; i++)
	{
		cout << envp[i] << endl;
	}

	system("pause");
}

 運行結果:

 

  •  UNIX操作系統中普遍擴展了對envp數組的支持;
  • 如果使用寬字符,則應該使用wmain代替main,並使用wchar*[] 或者wchar** 類型的envp。可使用tchar.h通用文本編輯。
  • envp一旦傳入,他就只是單純的字符串數組而已,不會隨着程序動態設置而改變。 可以使用putenv函數實時的修改環境變量,也可以使用getenv實時查看環境變量,但是envp本身不會發生改變。
  •  envp的應用舉例: i)如果程序在與運行過程中對環境變量做了修改,在它退出時想要恢復,可以參考envp 中的數據將環境變量恢復到程序執行前的設置。ii) 在程序運行過程中需要參考環境變量再做出決定

 

參考:https://www.cnblogs.com/jisongxie/p/7892366.html

           https://www.cnblogs.com/carsonzhu/p/5276317.html

 

 

 

 

 

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