[C] C언어의 문법중에서...

jinyeoulman의 이미지

qmail소스 분석중 아래의 구조체 표현중에서
int (*op)();
이런표현은 어떤 의미를 갖고 있는지요...
제가 C언어는 거의 초보여서요. 구찮으시더라도 답변 부탁드립니다.

typedef struct substdio {
char *x;
int p;
int n;
int fd;
int (*op)();
} substdio;

yielding의 이미지

인자는 없고 정수를 리턴하는 함수의 포인터를 구조체의 멤버로
선언한 겁니다..

Life rushes on, we are distracted

jinyeoulman의 이미지

답변 감사합니다.

cdpark의 이미지

인자가 있을 수도 있습니다. 인자가 없다면 void라고 썼겠죠.

C++과 C 언어의 차이죠.

죠커의 이미지

jinyeoulman wrote:
qmail소스 분석중 아래의 구조체 표현중에서
int (*op)();
이런표현은 어떤 의미를 갖고 있는지요...
제가 C언어는 거의 초보여서요. 구찮으시더라도 답변 부탁드립니다.

typedef struct substdio {
char *x;
int p;
int n;
int fd;
int (*op)();
} substdio;

명칭이 op인데 op에서 가장 가까운 순서대로 우선순위에 입각해서 읽습니다.

포인터보다는 배열과 함수의 우선순위가 높기 때문에 괄호를 쳐두지 않은 int *op(); 였다면 함수부터 읽어야 합니다. 하지만 괄호가 (*op)라고 쳐져 있기 떄문에 *부터 읽어서 pointer to 그리고 함수를 읽어서 function returning 그리고 마지막으로 자료형인 int를 읽어서 다음과 같이 됩니다.

pointer to function returning int 입니다. int를 리턴하는 함수의 포인터죠.

dangsan49의 이미지

qmail 소스 분석하시는군요?
저도 전에 좀 본적이 있었는데,

기본적으로 잘 짠것 같다는 생각이 들긴 하지만,
거의 함수별로 파일이 있어서, 파일수가 너무 많다는 ..

VENI, VIDI, VICI - Caesar, Gaius Julius -

jinyeoulman의 이미지

dangsan49 wrote:
qmail 소스 분석하시는군요?
저도 전에 좀 본적이 있었는데,

기본적으로 잘 짠것 같다는 생각이 들긴 하지만,
거의 함수별로 파일이 있어서, 파일수가 너무 많다는 ..

제가 정말루 초보라서여 잘짰는지는 잘 모르겠습니다.
하지만 같이 일하는 사람 말루는 광역변수를 마주잡이로 써서
자기는 별루 안 좋아한다는군요...
그리고 초보라서 그런지는 모르겟지만 가독성이 덜어지는듯한
느낌을 받앗습니다. 오픈소스라서 그런건지 아님 원래 이 정도규모의
프로그램은 다 그런건진 모르겟지만 우선은 넘 읽기 힘들군요.

zeroness의 이미지

jinyeoulman wrote:
dangsan49 wrote:
qmail 소스 분석하시는군요?
저도 전에 좀 본적이 있었는데,

기본적으로 잘 짠것 같다는 생각이 들긴 하지만,
거의 함수별로 파일이 있어서, 파일수가 너무 많다는 ..

제가 정말루 초보라서여 잘짰는지는 잘 모르겠습니다.
하지만 같이 일하는 사람 말루는 광역변수를 마주잡이로 써서
자기는 별루 안 좋아한다는군요...
그리고 초보라서 그런지는 모르겟지만 가독성이 덜어지는듯한
느낌을 받앗습니다. 오픈소스라서 그런건지 아님 원래 이 정도규모의
프로그램은 다 그런건진 모르겟지만 우선은 넘 읽기 힘들군요.

qmil 소스를 보고 있으면 설계단부터 계획이 참 잘 되어있구나..란 생각이 듭니다.근데 거의 함수별로 소스 파일이 하나씩 있어서 첨 소스파악할땐 귀찮죠..
vim+ctags를 사용하면 소스 파악하는데 훨씬 수월할거 같네요..
혹시 아직 ctags안써보셨음 한번 써보심이...ㅋ

http://kltp.kldp.org/stories.php?story=02/04/18/8009516

인간에게 있어 열정은 둘도없이 소중한 것이다. 경력이나 학력보다도... - 월리엄 록펠러 1세 -

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.