2013-09-29 33 views
5

Neden cstdlib eklemem gerekiyor ve bunu nasıl devre dışı bırakırım? Ben (ya da system() içeren bir parçası) <iostream> tarafından eklenmiştir çünkü <cstdlib> dahil etmek gerekmez, Windows 7.C++ kod içermez

#include <iostream> 

using std::cout; 
using std::endl; 

int main() 
{ 
    cout << "Hello" << endl; 

    system("pause"); 
    return 0; 
} 
+0

Bu, "iostream" tarafından cstdlib'e dahil edilmiş gibi görünüyor. En azından GCC 4.7.3'te durum böyle görünüyor. – juanchopanza

+0

Sorunuz genel (yanlış) bir anlayışın bir parçası gibi görünüyor, bir dokümantasyon "X yaparsanız, Y yapabilirsiniz" yazıyorsa, X'in Y'nin bir hata yapmasına neden olmadığına dair bir garantiye sahip olduğunuzu varsayalım. Çoğu zaman böyle olmaz. Hala Y'nin meşru olduğunu kanıtlamak için X yapmak zorundasınız. –

cevap

7

üzerinde GCC derleyicisi ile Code :: Blocks kullanıyorum. Diğer (standart) başlıkların standart başlıklara dahil olup olmadığı belirtilmemiş. Bu davranışı devre dışı bırakamazsınız, ancak farklı standart kitaplık uygulamaları arasındaki taşınabilirlik sorunlarından kaçınmak için bunun farkında olmalıdır.

Bu davranışa bağlı olmamalı ve <cstdlib>'u kendiniz dahil etmemelisiniz. Global system yerine std::system'u da kullanmalısınız. <c*> başlıklarındaki işlevlerin yalnızca std ad alanında olması garantilidir (genel olanlar, <*.h> başlıklarında). MS Visual Studio 2012 kullanılarak ve içinde am

4

, < iostream><xlocnum> içerir <ios> içerir <ostream> içermektedir <istream> içerir. dizisi diğer derleyici ve/veya uygulamalarda farklı olabilir içermesine karşın program dolaylı <cstdlib>

içerir böylece <xlocnum>, <cstdlib> içerir, bu kod çalışır nedeni <iostream>, doğrudan veya dolaylı <cstdlib> içermesi. iostream'un içerdiği kitaplıkların uygulamaya özgü olduğu ve kodun başka bir derleyicide derlenmeyebileceği belirtilmelidir. Genel bir kural olarak, bir başlık dosyasının içerdiği kütüphaneler genellikle iyi belgelendirilmemiş veya standartların bir parçası değildir, dolaylı kullanımlara dayanmazlar. Bir kitaplığa ihtiyacınız varsa, doğrudan ekleyin ve standart kitaplıklar include guarded olduğundan, programınızın derlemesine veya çalışma zamanına önemli overhead uygulanmayacaktır.

+0

Tüm uygulamalarda dolaylı dahil olmanın olması gerektiği gibi görünmesini sağlamış olursunuz. Durum bu değil. – juanchopanza

+0

Biraz daha spesifik olacak mısın? – MxNx

+0

Yani, 'iostream' 'cstdlib' yi çekmiyor olabilirsiniz, fakat her zaman olduğu gibi ses çıkarırsınız. – juanchopanza

İlgili konular