2011-01-11 4 views
0

나는 항상 cstdlib의 랜덤 함수가 오직 rand와 srand 일 뿐이라고 생각했지만, 다음 작업은 우분투 10.10에서 g ++로 컴파일 되었습니까?cstdlib에서 random()이 작동하는 이유는 무엇입니까? (우분투 10.10)

우분투 윈도우에서 이동할 때 난 사실이 발견, 내 컴파일은 모호 (나는 내 ​​자신의 '랜덤()'기능을 선언했다) 과부하되면서 실패했습니다.

#include <cstdlib> 
#include <iostream> 

using namespace std; 

int main() { 
srandom(50); 
cout << random(); 
return 0; 
}; 

또한 다음은 랜덤()와 srandom()가, 다른 사람의 사이에서, std 네임 스페이스에 선언되지 않습니다, 인 stdlib.h 확인 후 나타납니다, 우분투에서 제대로 컴파일합니다. 어떤이 엉덩이에 완전한 통증이 있습니다 ...

#include <iostream> 
#include <cstdlib> 

int main() { 
    std::cout << random(); 
    return 0; 
}; 

답변

2

컴파일러 작성자는 언어 라이브러리에 추가 작업을 추가하여 작업을 쉽게 할 수 있기 때문에 자유롭게 사용할 수 있습니다. 일반적으로 문제가되지 않을 것입니다. 추가하지 않을 네임 스페이스에 넣기 때문에 std입니다.

귀하의 문제는 컴파일러 작가가 유용하게 제공 그 작은 라인

using namespace std; 

std::random를 포함하여 프로그램의 네임 스페이스에 std에서 모든을 끌어에서 발생한다.

using std::rand; 
using std::srand; 

또한 C++ FAQ 라이트에서 this question를 참조하십시오 대신 명시 적으로 std에서 당겨하는지 선언하면, 당신은 지역 randomstd::random와 소지품하지 않을 것입니다. ` `이 아닌` `의

+1

C++ 0x도 std :: random()을 정의하지 않는다고 생각합니다. 그래도 이것이 좋은 조언이지만 다니엘의 문제와 관련이 없다고 생각합니다. –

+2

@ 짐은 결코 C++이 std :: random을 정의하지 않는다고 말하지 않았습니다. 사실 나는 컴파일러 작성자가 C++ 표준이 아닌 자신의 물건을 자유롭게 추가 할 수 있다고 설명했다고 생각합니다. –

+0

도움 Phil을 보내 주셔서 감사합니다. – dcousens

5

random()Single Unix Specification의 일부입니다. 그것은 C++ 표준의 일부가 아닙니다. 그래서 Windows에 없지만 대부분의 Unix/Mac 플랫폼에 있습니다.

+0

. 나는 SUS가 C++을 설명하기 위해 업데이트되었다고 생각하지 않는다. – MSalters

+1

우분투에서 ''을 (를) 포함하면 ''이 (가) 종속됩니다. – Nate

관련 문제