소스 컴파일 중에..에러 도무지 원인이 뭔지...

uamyd5279의 이미지

에러의 원인을 찾지 못하겠네요...
다른 게 필요 하다면, 올려 드릴께요.
입사해서 팀장님이 맡긴 첫일인데....ㅜ.ㅡ...
컴파일이 안돼서... 암 것도 못하고 있네요
도움이 필요합니다

-----< 에러 메시지 >-------------------------------------------------

../../inc/taf_shm.h:53: warning: no semicolon at end of struct or union
../../inc/taf_shm.h:53: parse error before numeric constant
../../inc/taf_shm.h:55: warning: type defaults to `int' in declaration of `T_SYS_INFO'
../../inc/taf_shm.h:55: warning: data definition has no type or storage class

-----< ../../inc/taf_shm.h >------------------------------------------

11 typedef struct _T_SYS_INFO {
12 unsigned short siTafNo;
13
14 struct {
15 char cActive;
16 char cAlarmLevel;
17 char cDebugLevel;
18 char cReserved1;
19 char szProcName[PROC_NAME_SIZE];
20 char szVersion[8];
21 unsigned int uiLastBeat;
22 unsigned int uiBeat;
23 } SW[MAX_SW_BLOCKS];
24
25 struct {
26 int dWM_Critical;
27 int dWM_Major;
28 int dWM_Minor;
29 } CPU;
30
31 struct {
32 int dWM_Critical;
33 int dWM_Major;
34 int dWM_Minor;
35 } MEM;
36
37 struct {
38 int dWM_Critical;
39 int dWM_Major;
40 int dWM_Minor;
41 } DISK;
42
43 struct {
44 char cActive;
45 char cAlarmLevel;
46 char cDebugLevel;
47 char cReserved1;
48 char szProcName[PROC_NAME_SIZE];
49 char szVersion[8];
50 unsigned int uiLastBeat;
51 unsigned int uiBeat;
52 } SW[MAX_SW_BLOCKS];
53
54 } T_SYS_INFO;

익명 사용자의 이미지

Quote:
../../inc/taf_shm.h:53: parse error before numeric constant

혹시 T_SYS_INFO 를 어디서 정의 해서 쓰고 있지 않나요?

doldori의 이미지

SW[MAX_SW_BLOCKS]가 두 번 들어가서 그런 거 아닌가요?

세이군의 이미지

2단계 struct 구조라 소스 파악도 힘들군요..
내부 구조체를 정리하고 보니 우선
typedef struct _T_SYS_INFO {
unsigned short siTafNo;
struct _TYPE1 SW[MAX_SW_BLOCKS];
struct _TYPE2 CPU;
struct _TYPE3 MEM;
struct _TYPE4 DISK;
struct _TYPE5 SW[MAX_SW_BLOCKS];
} T_SYS_INFO;

_TYPE? 는 임의로 붙인 이름입니다.(원래 코드와 비교하면 _TYPE1과 _TYPE5는 같은 놈이지요.)
이렇게 정리해서 보니 doldori 님의견처럼 SW[MAX_SW_BLOCKS] 가 두번 정의되어 있네요..
여기서 1차적인 문제가 있을 듯 합니다.
그리고 제안을 드린다면 내부 구조체들을 모두 typedef를 이용해서 _T_SYSINFO외부로 빼 주세요.
그렇게 한 뒤에 다시한번 컴파일 해 보세요.. 그래야 정확하게 어디가 잘못인지를 알 수 있을 것 같습니다.
또한 외부로 빼 두는 것이 유지보수에 편리합니다.

익명 사용자의 이미지

먼저 관심 가져 주신 것 감사드리구요.
앞선 답변들에 대해 답변을 달자면..SW[MAX_SW_BLOCKS]는 두번 들어간 것이 아니고, 제가 복사를 급하게 하느라, 잘못 한거구요. 위에 한번만 적혀 있습니다.

소온님 wrote:
Quote:
../../inc/taf_shm.h:53: parse error before numeric constant

혹시 T_SYS_INFO 를 어디서 정의 해서 쓰고 있지 않나요?

이 질문에 대해서는 '아니요'네요. 정의는 적힌 소스에서만 정의되어 있고, 다른 화일에서 extern으로 선언해서 포인터로만 사용하고 있습니다.

님들이 말씀해 주신대로 아래와 같이 꺼내서 돌렸는데, 그래도 에러가 나네요. 그래도 이렇게 보니 눈에 확 들어오기는 하는데...
unsigned short가 무슨 말썽을 일으키는 건지... 알수가 없네요 ㅜ.ㅜ

----< error message >-----------------
../../inc/taf_shm.h:42: warning: no semicolon at end of struct or union
../../inc/taf_shm.h:42: parse error before numeric constant
../../inc/taf_shm.h:78: parse error before '}' token
../../inc/taf_shm.h:78: warning: type defaults to `int' in declaration of `T_SYS_INFO'
../../inc/taf_shm.h:78: warning: data definition has no type or storage class

---<../../inc/taf_shm.h >----------------

11 typedef struct {
12 char cActive;
13 char cAlarmLevel;
14 char cDebugLevel;
15 char cReserved1;
16 char szProcName[PROC_NAME_SIZE];
17 char szVersion[8];
18 unsigned int uiLastBeat;
19 unsigned int uiBeat;
20 } _T_SW;
21
22 typedef struct {
23 int dWM_Critical;
24 int dWM_Major;
25 int dWM_Minor;
26 } _T_CPU;
27
28 typedef struct {
29 int dWM_Critical;
30 int dWM_Major;
31 int dWM_Minor;
32 } _T_MEM;
33
34 typedef struct {
35 int dWM_Critical;
36 int dWM_Major;
37 int dWM_Minor;
38 } _T_DISK;
39
40 typedef struct _T_SYS_INFO {
41 unsigned short siTafNo;
42 _T_SW SW[MAX_SW_BLOCKS];
43 _T_CPU CPU;
44 _T_MEM MEM;
45 _T_DISK DISK;
46
47 #if 0
48 struct {
49 char cActive;
50 char cAlarmLevel;
51 char cDebugLevel;
52 char cReserved1;
53 char szProcName[PROC_NAME_SIZE];
54 char szVersion[8];
55 unsigned int uiLastBeat;
56 unsigned int uiBeat;
57 } SW[MAX_SW_BLOCKS];
58
59 struct {
60 int dWM_Critical;
61 int dWM_Major;
62 int dWM_Minor;
63 } CPU;
64
65 struct {
66 int dWM_Critical;
67 int dWM_Major;
68 int dWM_Minor;
69 } MEM;
70
71 struct {
72 int dWM_Critical;
73 int dWM_Major;
74 int dWM_Minor;
75 } DISK;
76
77 #endif
78 } T_SYS_INFO;

lsj0713의 이미지

일단 올리신 부분에서 문제는 없습니다. 바로 위에 올리신 코드를 따로 떼어다가 컴파일해 보시면 아무런 문제가 없다는걸 확인하실 수 있습니다. 저는 PROC_NAME_SIZE와 MAX_SW_BLOCKS가 어떻게 정의되어 있는가가 의심이 듭니다.

만약 위의 두 상수값들도 정상이라면, 그 이전의 코드(#include로 포함된 소스들을 포함해서!)에서 { }, (), [] 등등이 짝이 제대로 맞는지를 확인해보고 싶군요. 혹은 ;라던가 등등...

참고로 vim에서 커서를 소스 파일의 가장 마지막의 괄호 위에 올려놓고 % 키를 치면 대단히 편하게 짝이 맞는지 아닌지를 확인할 수 있습니다.

익명 사용자의 이미지

관심 가져 주셔서 감사합니다.
제가 헤더화일을 건드렸는데...
거기에 새로 추가한 변수명이...
같더군요..SW...ㅡ.ㅡ;;;;

정말 별것도 아닌 거였는데 죄송하구요.
다시한번 관심 가져 주신 분들께 감사드립니다.
다들 평안하세요.^^

ps..그런데..사용중인 사용자 이름이라고 글이 안 올려 지네요..쿨럭..

댓글 달기

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