Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tüm C++ programlarının bir main
işlevi olmalıdır. C++ programını işlev olmadan main
derlemeye çalışırsanız, derleyici bir hata oluşturur. (Dinamik bağlantı kitaplıklarının ve static kitaplıklarının bir main
işlevi yoktur.) İşlev main
, kaynak kodunuzun yürütülmeye başladığı yerdir, ancak bir program işleve girmeden main
önce, açık başlatıcıları olmayan tüm static sınıf üyeleri sıfır olarak ayarlanır. Microsoft C++'da, genel static nesneler de giriş main
öncesinde başlatılır. Diğer C++ işlevleri için main
geçerli olmayan işleve çeşitli kısıtlamalar uygulanır. İşlev main
:
- Aşırı yüklenemez (bkz. İşlev aşırı yüklemesi).
- olarak
inline
bildirilemiyor. - olarak
static
bildirilemiyor. - Adresi alınamıyor.
- Programınızdan çağrılamıyor.
İşlev main
imzası
İşlevin main
bir bildirimi yoktur, çünkü dilde yerleşiktir. Bu durumda, için main
bildirim söz dizimi şöyle görünür:
int main();
int main(int argc, char *argv[]);
içinde main
hiçbir dönüş değeri belirtilmezse, derleyici sıfır dönüş değeri sağlar.
Standart komut satırı bağımsız değişkenleri
için main
bağımsız değişkenler, bağımsız değişkenlerin uygun komut satırı ayrıştırmasına izin verir. ve argv
türleri argc
dile göre tanımlanır. ve adları argc
argv
gelenekseldir, ancak istediğiniz gibi adlandırabilirsiniz.
Bağımsız değişken tanımları aşağıdaki gibidir:
argc
içinde izleyen argvbağımsız değişkenlerin sayısını içeren bir tamsayı. argc parametresi her zaman 1'e eşit veya daha büyüktür.
argv
Programın kullanıcısı tarafından girilen komut satırı bağımsız değişkenlerini temsil eden boş sonlandırılmış bir dize dizisi. Kural gereği, argv[0]
programın çağrıldığı komutdur. argv[1]
ilk komut satırı bağımsız değişkenidir. Komut satırındaki son bağımsız değişken , argv[argc - 1]
ve argv[argc]
her zaman NULL'tır.
Komut satırı işlemeyi gizleme hakkında bilgi için bkz . C++ komut satırı işlemeyi özelleştirme.
Not
Kural gereği, argv[0]
programın dosya adıdır. Ancak, Windows'ta kullanarak CreateProcess
bir işlem oluşturmak mümkündür. Hem birinci hem de ikinci bağımsız değişkenleri (lpApplicationName
ve lpCommandLine
) argv[0]
kullanırsanız yürütülebilir ad olmayabilir. Yürütülebilir adı ve tam yolunu almak için kullanabilirsiniz GetModuleFileName
.
Microsoft'a özgü uzantılar
Aşağıdaki bölümlerde Microsoft'a özgü davranış açıklanmaktadır.
wmain
İşlev ve _tmain
makro
Kaynak kodunuzu Unicode geniş karakterlerini kullanacak şekilde tasarlarsanız, Microsoft'a özgü wmain
giriş noktasını kullanabilirsiniz. Bu, öğesinin main
geniş karakterli sürümüdür. için geçerli bildirim söz dizimi aşağıdadır wmain
:
int wmain();
int wmain(int argc, wchar_t *argv[]);
Ayrıca, içinde tchar.h
tanımlanan bir önişlemci makro olan Microsoft'a özgü _tmain
öğesini de kullanabilirsiniz. _tmain
tanımlanmadığı sürece _UNICODE
olarak main
çözümleniyor. Bu durumda, _tmain
olarak çözümler wmain
. Ile _tmain
başlayan _t
makro ve diğer makrolar, hem dar hem de geniş karakter kümeleri için ayrı sürümler oluşturması gereken kodlar için kullanışlıdır. Daha fazla bilgi için bkz . Genel metin eşlemelerini kullanma.
Şu kaynaktan dönüyor:void
main
Bir Microsoft uzantısı olarak ve main
wmain
işlevleri döndürülebilir void
(dönüş değeri yok) olarak bildirilebilir. Bu uzantı diğer bazı derleyicilerde de kullanılabilir, ancak kullanılması önerilmez. Bir değer döndürmediğinde main
simetri için kullanılabilir.
bildirirseniz main
veya wmain
döndürürsenizvoid
, deyimini kullanarak return
bir exit kodu üst işleme veya işletim sistemine döndüremezsiniz. veya wmain
olarak void
bildirildiğinde main
bir exit kod döndürmek için işlevini kullanmanız exit
gerekir.
Komut envp
satırı bağımsız değişkeni
main
veya wmain
imzaları, ortam değişkenlerine erişim için microsoft'a özgü isteğe bağlı bir uzantıya izin verir. Bu uzantı, Windows ve UNIX sistemleri için diğer derleyicilerde de yaygındır. Ad envp
gelenekseldir, ancak ortam parametresini istediğiniz şekilde adlandırabilirsiniz. Ortam parametresini içeren bağımsız değişken listeleri için geçerli bildirimler şunlardır:
int main(int argc, char* argv[], char* envp[]);
int wmain(int argc, wchar_t* argv[], wchar_t* envp[]);
envp
İsteğe bağlı envp
parametre, kullanıcının ortamında ayarlanan değişkenleri temsil eden bir dize dizisidir. Bu dizi bir NULL girdisi tarafından sonlandırılır. () işaretçileri char
dizisi olarak veya (char *envp[]
) işaretçilerinin char
char **envp
işaretçisi olarak bildirilebilir. Programınız yerine main
kullanıyorsa wmain
yerine veri türünü char
kullanınwchar_t
.
ve ortamına main
wmain
geçirilen ortam bloğu, geçerli ortamın "donmuş" bir kopyasıdır. Daha sonra veya _wputenv
için bir çağrı putenv
yaparak ortamı değiştirirseniz, geçerli ortam (veya _wgetenv
tarafından döndürüldükçe getenv
ve _environ
veya _wenviron
değişkeni) değişir, ancak tarafından işaret edilen envp
blok değişmez. Ortam işlemeyi gizleme hakkında daha fazla bilgi için bkz . C++ komut satırı işlemeyi özelleştirme. envp
Bağımsız değişken C89 standardıyla uyumludur ancak C++ standartlarıyla uyumlu değildir.
Örnek bağımsız değişkenler: main
Aşağıdaki örnekte, için , argv
ve envp
bağımsız değişkenlerinin nasıl kullanılacağı argc
gösterilmektedirmain
:
// argument_definitions.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>
using namespace std;
int main( int argc, char *argv[], char *envp[] )
{
bool numberLines = false; // Default is no line numbers.
// If /n is passed to the .exe, display numbered listing
// of environment variables.
if ( (argc == 2) && _stricmp( argv[1], "/n" ) == 0 )
numberLines = true;
// Walk through list of strings until a NULL is encountered.
for ( int i = 0; envp[i] != NULL; ++i )
{
if ( numberLines )
cout << i << ": "; // Prefix with numbers if /n specified
cout << envp[i] << "\n";
}
}
C++ komut satırı bağımsız değişkenlerini ayrıştırma
Microsoft C/C++ kodu tarafından kullanılan komut satırı ayrıştırma kuralları Microsoft'a özeldir. Çalışma zamanı başlangıç kodu, işletim sistemi komut satırında verilen bağımsız değişkenleri yorumlarken şu kuralları kullanır:
Bağımsız değişkenler boşluk veya sekme olan boşlukla sınırlandırılır.
İlk bağımsız değişken (
argv[0]
) özel olarak ele alınır. Program adını temsil eder. Geçerli bir yol adı olması gerektiğinden, çift tırnak işaretleri ("
) ile çevrili bölümlere izin verilir. Çift tırnak işaretleri çıkışaargv[0]
dahil değildir. Çift tırnak işaretleri ile çevrili bölümler, bağımsız değişkenin sonu olarak bir boşluk veya sekme karakterinin yorumlanmasını engeller. Bu listedeki sonraki kurallar geçerli değildir.Çift tırnak işaretleri ile çevrili bir dize, boşluk karakterleri içerebilen tek bir bağımsız değişken olarak yorumlanır. Tırnak içine alınmış bir dize bağımsız değişkene eklenebilir. Şapka işareti (
^
), kaçış karakteri veya sınırlayıcı olarak tanınmaz. Tırnak içinde bir çift tırnak işareti, tek bir kaçış çift tırnak işareti olarak yorumlanır. Bir kapanış çift tırnak işareti bulunmadan önce komut satırı biterse, şimdiye kadar okunan tüm karakterler son bağımsız değişken olarak çıktı olur.Önünde ters eğik çizgi (
\"
) olan çift tırnak işareti, değişmez değer çift tırnak işareti ("
) olarak yorumlanır.Ters eğik çizgi, çift tırnak işaretinin hemen önüne gelmediği sürece tam anlamıyla yorumlanır.
Çift sayıda ters eğik çizgi ve ardından çift tırnak işareti gelirse, her ters eğik çizgi () çifti için diziye
argv
bir ters eğik çizgi (\
\\
) yerleştirilir ve çift tırnak işareti ("
) dize sınırlayıcısı olarak yorumlanır.Tek sayıda ters eğik çizgi ve ardından çift tırnak işareti geliyorsa, her ters eğik çizgi () çifti için diziye
argv
bir ters eğik çizgi (\
\\
) yerleştirilir. Çift tırnak işareti, kalan ters eğik çizgi tarafından kaçış dizisi olarak yorumlanır ve sabit çift tırnak işaretinin ("
) içineargv
yerleştirilmesine neden olur.
Komut satırı bağımsız değişken ayrıştırma örneği
Aşağıdaki program, komut satırı bağımsız değişkenlerinin nasıl geçirildiğini gösterir:
// command_line_arguments.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( int argc, // Number of strings in array argv
char *argv[], // Array of command-line argument strings
char *envp[] ) // Array of environment variable strings
{
int count;
// Display each command-line argument.
cout << "\nCommand-line arguments:\n";
for( count = 0; count < argc; count++ )
cout << " argv[" << count << "] "
<< argv[count] << "\n";
}
Komut satırlarını ayrıştırma sonuçları
Aşağıdaki tabloda, yukarıdaki listede yer alan kuralları gösteren örnek giriş ve beklenen çıkış gösterilmektedir.
Komut satırı girişi | argv[1] | argv[2] | argv[3] |
---|---|---|---|
"abc" d e |
abc |
d |
e |
a\\b d"e f"g h |
a\\b |
de fg |
h |
a\\\"b c d |
a\"b |
c |
d |
a\\\\"b c" d e |
a\\b c |
d |
e |
a"b"" c d |
ab" c d |
Joker karakter genişletmesi
Microsoft derleyicisi isteğe bağlı olarak komut satırında dosya adı ve yol bağımsız değişkenlerini belirtmek için soru işareti (?
) ve yıldız işareti (*
) joker karakterlerini kullanmanıza olanak tanır.
Komut satırı bağımsız değişkenleri, çalışma zamanı başlangıç kodundaki bir iç yordam tarafından işlenir ve varsayılan olarak joker karakterler dize dizisinde argv
ayrı dizelere genişletilmez. Derleyici seçeneklerinize veya komut satırınıza LINK
/link
dosyasını (wsetargv.obj
için wmain
dosyası) ekleyerek setargv.obj
joker karakter genişletmeyi etkinleştirebilirsiniz.
Çalışma zamanı başlangıç bağlayıcı seçenekleri hakkında daha fazla bilgi için bkz . Bağlantı seçenekleri.
C++ komut satırı işlemeyi özelleştirme
Programınız komut satırı bağımsız değişkenlerini almazsa, az miktarda alan kazanmak için komut satırı işleme yordamını gizleyebilirsiniz. Kullanımını engellemek için, derleyici seçeneklerinize veya komut satırınıza dosyasını (hem de wmain
main
için) ekleyinnoarg.obj
.LINK
/link
Benzer şekilde, ortam tablosuna bağımsız değişken aracılığıyla envp
hiç erişmezseniz, iç ortam işleme yordamını gizleyebilirsiniz. Kullanımını engellemek için, derleyici seçeneklerinize veya komut satırınıza dosyasını (hem de wmain
main
için) ekleyinnoenv.obj
.LINK
/link
Programınız, C çalışma zamanı kitaplığında spawn
veya exec
yordam ailesine çağrı yapabilir. Varsa, bir ortamı üst işlemden alt işleme geçirmek için kullanıldığından ortam işleme yordamını gizlememelisiniz.