0
struct proc_time /* info and times about a single process*/ 
{ 
    pid_t pid; /* pid of the process*/ 
    char name[16]; /* file name of the program executed*/ 
    unsigned long start_time; /* start time of the process*/ 
    unsigned long real_time; /* real time of the process execution*/ 
    unsigned long user_time; /* user time of the process*/ 
    unsigned long sys_time; /* system time of the process*/ 
}; 

struct proctimes /* info and times about all processes we need*/ 
{ 
    struct proc_time proc; /* process with given pid or current process */ 
    struct proc_time parent_proc; /* parent process*/ 
    struct proc_time oldest_child_proc; /* oldest child process*/ 
    struct proc_time oldest_sibling_proc; /* oldest sibling process*/ 
};

宣言の何が問題なのか理解できず、2 番目のstruct開始行に次のエラーが表示されます。

「構造体」の前に「;」、識別子、または「(」が必要です。

4

3 に答える 3

3

問題は、違法なコメント区切り文字として /.../ を使用していることです。この線:

struct proc_time proc; /process with given pid or current process/ 

次のものに置き換える必要があります。

 struct proc_time proc; /* process with given pid or current process */ 
于 2012-12-21T00:19:44.480 に答える
0

これらの構造体をファイルスコープで宣言した場合にこれが発生する本当の理由はありません(コメントの問題を修正したと仮定します)。

ただし、どういうわけか、これらの構造体をより大きな構造体の中で宣言できた場合は、実際にCコンパイラからエラーが発生します。

struct some_struct
{

  struct proc_time
  { 
    ...
  }; /* <- error: identifier expected */

  struct proctimes
  { 
    ...
  }; /* <- error: identifier expected */

};

C言語では、その型のデータ型をすぐに宣言せずに「ネストされた」方法で構造体型を宣言することは違法です。

于 2012-12-21T00:28:50.247 に答える