Mevcut dil standartlarına atıfta bulunarak zaten verilmiş olan cevaplara eklemek istiyorum.
İs 'int main;' geçerli bir C programı?
Kısa cevap (bence): Yalnızca uygulamanız "bağımsız yürütme ortamı" kullanıyorsa.
C11'den aşağıdaki alıntılar
5. Çevre
Bir uygulama, C kaynak dosyalarını çevirir ve C programlarını , çeviri ortamı ve yürütme ortamı olarak adlandırılacak olan iki veri işleme sistemi ortamında yürütür [...]
5.1.2 Yürütme ortamları
İki yürütme ortamı tanımlanmıştır: bağımsız ve barındırılan. Her iki durumda da, çalıştırma ortamı tarafından belirlenmiş bir C işlevi çağrıldığında program başlangıcı gerçekleşir.
5.1.2.1 Bağımsız ortam
Bağımsız bir ortamda (C programının yürütülmesinin bir işletim sisteminin herhangi bir yararı olmadan gerçekleşebileceği), program başlangıcında çağrılan işlevin adı ve türü uygulama tanımlıdır.
5.1.2.2 Barındırılan ortam
Barındırılan bir ortamın sağlanması gerekmez, ancak varsa aşağıdaki özelliklere uyacaktır.
5.1.2.2.1 Program başlatma
Program başlangıcında çağrılan işlev main olarak adlandırılır . [...] Dönüş türü bir int ile ve parametresiz [...] veya iki parametre [...] veya eşdeğeri veya başka bir uygulama tanımlı şekilde tanımlanmalıdır.
Bunlardan aşağıdakiler gözlemlenir:
- Bir C11 programı, bağımsız veya barındırılan bir yürütme ortamına sahip olabilir ve geçerli olabilir.
- Bağımsız bir tane varsa, bir ana işlevi olması gerekmez.
- Aksi takdirde, int türünde bir dönüş değeri olan bir tane olmalıdır .
Bağımsız bir yürütme ortamında, bunun başlatmanın gerçekleşmesine izin vermeyen geçerli bir program olduğunu iddia ediyorum, çünkü 5.1.2'de gerektiği gibi bunun için mevcut bir işlev yok. Barındırılan bir yürütme ortamında, kodunuz main adlı bir nesneyi tanıtsa da , bir dönüş değeri sağlayamaz, bu nedenle bunun bu anlamda geçerli bir program olmadığını savunabilirim, ancak daha önce olduğu gibi, program değilse çalıştırılması amaçlanmıştır (örneğin, yalnızca veri sağlamak isteyebilir), o zaman sadece bunu yapmaya izin vermez.
İs 'int main;' geçerli bir C ++ programı?
Kısa cevap (bence): Yalnızca uygulamanız "bağımsız yürütme ortamı" kullanıyorsa.
C ++ 14'ten alıntı
3.6.1 Ana işlev
Bir program, programın belirlenmiş başlangıcı olan main adlı global bir işlevi içerecektir. Bağımsız bir ortamda bir programın bir ana işlevi tanımlamak için gerekli olup olmadığı, uygulama tarafından tanımlanır. [...] dönüş türü int türünde olacaktır, ancak aksi takdirde türü uygulama tanımlıdır. [...] main adı başka türlü saklı değildir.
Burada, C11 standardının aksine, bağımsız yürütme ortamına daha az kısıtlama uygulanır, çünkü hiçbir başlangıç işlevi belirtilmezken, barındırılan bir yürütme ortamı için durum C11 ile hemen hemen aynıdır.
Yine, barındırılan durum için kodunuzun geçerli bir C ++ 14 programı olmadığını iddia ediyorum, ancak bunun bağımsız durum için olduğundan eminim.
Cevabım sadece uygulama ortamını dikkate aldığından, çeviri ortamında meydana gelen isim kargaşası önceden gerçekleştiği için dasblinkenlicht'in cevabının devreye girdiğini düşünüyorum . Burada, yukarıdaki alıntılara bu kadar katı bir şekilde uyulduğundan pek emin değilim.
gcc -std=c99 -pedantic ...