2013-02-07 1 views
1

분명히 C++ scanf()cin보다 좋은 상황이 있다면 printf()cout보다 실용적인 경우가 있는지 궁금합니다.C++에서 cout보다 printf()를 사용하면 큰 장점이 있습니까?

+1

세부 사항을 기억하지 못하기 때문에 완전한 대답을 제공 할 수는 없지만 C++ 표준위원회 위원 (그는 Facebook에서 일하고 있음)이 말한 내용에서 그는 cout이 printf()를 선호한다고 언급했습니다. 스레드와 잘 작동합니다. –

+0

C++의 어떤 상황에서'scanf()'가'cin'보다 더 좋을지 궁금합니다. –

+0

@DaveRager 'scanf()'를 사용하여 특정 문자열을 입력하고 해석하는 것이 더 쉽다는 것을 알게되었습니다. C에있는 주먹 계산기 프로그램의 줄은 다음과 같습니다.'scanf ("% f % c % f", & num1, & op, & num2)'. 'op'는 mathematica 연산자 (+, -, *, /)를 나타내는 변수이며 제대로 사용하면 수십 줄의 쓸데없는 코드를 줄일 수 있습니다. – Jules

답변

3

ostream 인터페이스 (따라서 cout)를 사용하여 수행 할 수있는 작업은 이전 스타일 printf()보다 훨씬 우수합니다. 먼저 유형의 안전입니다. 실수로 잘못된 형식의 시퀀스를 사용하면 세분화 위반이 발생하지 않습니다.

예. Posx fstat 함수에 의해 반환 된 struct stat의 속성을 출력해야한다고 상상해보십시오. 속성의 유형은 시스템 종속 typedef를 사용하여 정의됩니다.

struct stat { 
    dev_t  st_dev;  /* ID of device containing file */ 
    ino_t  st_ino;  /* inode number */ 
    mode_t st_mode; /* protection */ 
    nlink_t st_nlink; /* number of hard links */ 
    uid_t  st_uid;  /* user ID of owner */ 
    gid_t  st_gid;  /* group ID of owner */ 
    dev_t  st_rdev; /* device ID (if special file) */ 
    off_t  st_size; /* total size, in bytes */ 
    /* ... more attributes */ 

}};

dev_t과 같은 것은 다른 시스템에 다른 유형 (typedef)입니다. 당신은 당신의 특정 시스템 dev_t에 그 int, 말,에 해당 찾고,이 쓸 수 있습니다 :

printf("dev_t=%d", s.st_dev); 

을 당신이 정의하는 다른 시스템에 컴파일 할 때, 예를 들어, 시스템에 작동하지만 것 , dev_tint이 아니지만, 예를 들어 long 일 경우 코드가 컴파일되지만 런타임에는 오류가 발생합니다. 당신이 C++ 스트림을 사용하고 << 연산자를 오버로드 된 경우

다음 물건은 항상 제대로 작동합니다

cout을 < < "준 dev_t ="< < s.st_dev;

C++ 스트림의 또 다른 중요한 이점은 확장 성입니다. 형식 시퀀스 printf의 이해를 확장 할 수는 없습니다. 반대로 << 연산자를 쉽게 오버로드하여 자신의 유형의 객체를 편리하게 인쇄 할 수 있습니다.

4

짧은 대답 : 항상 !!! C++에서 printf와는 달리 형식 안전성을 제공하므로 항상 printf를 사용하는 것이 좋습니다.

+1

의심의 여지가 거기 cout과 관련된 장점이 있지만 사실 cout은 스레드 안전하지 않습니다 printf 일부 측면에서 우수한 :), 그래서 특히 당신이 멀티 스레드 환경 피하기 등 피하기 디버깅에 ... – Saqlain

관련 문제