#pragma의 용도가 뭔가요?

thisrule의 이미지

프로그램들을 보면, 책에는 나와있지 않은 그런 code들이 많습니다.
제가 잘 모르는 것중에 대표적인 것으로
#pragma, using namespace 가 있습니다.
위 2가지의 용도가 무엇이며, 사용방법을 어떻게 되나요?

dd의 이미지

#pragma 지시어로 할 수 있는게 많지만;
네트워크 프로그래밍할 때 #pragma pack을 사용한 것 외에는
별로 써본 기억이 없네요-

컴파일러는 보통 최적화를 위해 구조체 같은 것들을 찍어낼 때
메모리 정렬을 해줍니다.
뭐 가령

struct foo
{
    char bar;
    int qoo;
};

뭐 이런게 있으면, char는 1바이트고 qoo는 4바이트일테구요. (보통)
일반적으로 4바이트로 정렬을 많이 하니까요. bar하고 qoo 사이의 3바이트를 알아서 컴파일러가 padding 해준답니다. 사용하지는 않는 영역인데 구조체 크기는 더 커지죠..

결과적으로 패킷 보내고 하면 기대했던 결과랑 다르게되고..
그래서 pragma pack 같은 지시어로 메모리 정렬을 안 하도록 지시해준다던가..
다른 용도도 많이 있지만 다른 분들께서 써주시겠죠? :)

yui의 이미지

thisrule wrote:
프로그램들을 보면, 책에는 나와있지 않은 그런 code들이 많습니다.
제가 잘 모르는 것중에 대표적인 것으로
#pragma, using namespace 가 있습니다.
위 2가지의 용도가 무엇이며, 사용방법을 어떻게 되나요?

#pragma directive는 컴파일러에게 이런저런 설정(?)을 하는 지시자입니다.
주로 윈도 소스에서 많이 보이더군요.
자주 보이는 건 #pragma packed나 #pragma once입니다.
전자는 구조체 사이의 패딩 없이 메모리를 할당하는 것이고
후자는 includsion guard를 #ifndef #define #endif 세줄 말고 맨위에 저 한줄만 적어주면 동일하게 동작한다고 합니다.
나머지들도 다 컴파일러마다 다른 거라 그때그때 찾아보시는 것 외에는 방도가 없어보입니다.

c++엔 이름들이 이름공간안에 속해 있습니다. 그래서 cout도 그냥 쓰면 안되고 std::cout(std이름공간안에 있는 cout) 이라 써줘야 합니다. std 이름공간안의 것들을 많이 쓸 거 같으면 일일이 이름공간을 명시하기 귀찮으니깐 using namespace std로 std이름공간의 이름들을 다 불러옵니다.
using namespace std; 가 없이는 hello, world를 찍을 수 없기 때문에 아무 c++ 책에서나 꼭 나옵니다. "using"과 "using namespace"항목을 책에서 찾아보세요.

랜덤여신의 이미지

컴파일러가 이해해야 하는, 이것저것 분류하기 어려운 잡다한 기능들을 모아 둔 것이 #pragma 라고 이해하시면 되겠습니다. -_-;;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.