2016-06-10 43 views
0

我試圖實現一個簡單的環形緩衝區使用結構。我從來沒有使用過結構,只是開始嘗試理解它們。編譯器退出時出現此錯誤:簡單的C結構將不會編譯

expected '=', ',', ';', 'asm' or '__attribute__' before '.' token 

錯誤指的是最後兩行。

#define MAX_PROCESSES 16 

struct ring_buffer{ 
    uint8_t data[MAX_PROCESSES]; 
    uint8_t size; 
    uint8_t count; 
    uint8_t write_pos; 
    uint8_t read_pos; 
}; 

struct ring_buffer ring_buffer_processes; 
ring_buffer_processes.size = MAX_PROCESSES; 
ring_buffer_processes->size = MAX_PROCESSES; 

我已經使用to運算符只是爲了測試目的,看看它是否有效。這當然只應該是一條線。

我也嘗試過使用「typedef」,但這也沒有幫助。這裏有什麼問題?

感謝

+0

刪除最後一行,您通過'。'到達結構成員。 operator –

+0

@Peder它編譯得很好:https://godbolt.org/g/j3NO3P – Midas

+4

如果這是你的整個代碼,你必須將最後兩行包裝在main()中 – Gar

回答

1

要訪問的結構的任何成員,我們使用成員訪問運算符(。),但

要使用一個指針結構訪問結構的成員,你必須使用運營商。

更改代碼..

#define MAX_PROCESSES 16 

struct ring_buffer{ 
    uint8_t data[MAX_PROCESSES]; 
    uint8_t size; 
    uint8_t count; 
    uint8_t write_pos; 
    uint8_t read_pos; 
}; 

struct ring_buffer ring_buffer_processes; 

void main(){ 
    ring_buffer_processes.size = MAX_PROCESSES; 
    //ring_buffer_processes->size = MAX_PROCESSES; Not required you can access struct variable with . operator. 
} 
3

你的代碼中有兩個錯誤:

  1. 它缺少執行的入口點即主()
  2. 它正試圖訪問一個成員使用通過指針訪問成員時使用的' - >'。

所以糾正這些分給我們:

#include <stdint.h> 

#define MAX_PROCESSES 16 

struct ring_buffer{ 
    uint8_t data[MAX_PROCESSES]; 
    uint8_t size; 
    uint8_t count; 
    uint8_t write_pos; 
    uint8_t read_pos; 
}; 

int main(void) 
{ 
    struct ring_buffer ring_buffer_processes; 
    struct ring_buffer * p_ring_buffer_processes; 

    p_ring_buffer_processes = &ring_buffer_processes; 
    ring_buffer_processes.size = MAX_PROCESSES; 
    p_ring_buffer_processes->size = MAX_PROCESSES; 

    return 0; 
} 
0

在C語言中,非指針對象已使用訪問。運算符和指針對象已通過使用運算符訪問。

 #define MAX_PROCESSES 16 

    struct ring_buffer{ 
     uint8_t data[MAX_PROCESSES]; 
     uint8_t size; 
     uint8_t count; 
     uint8_t write_pos; 
     uint8_t read_pos; 
    }; 

    struct ring_buffer ring_buffer_processes; 
ring_buffer_processes. size = MAX_PROCESSES; 

    struct ring_buffer *ptr_ring_buffer_processes; 
*ptr_ring_buffer_processes-> size =& MAX_PROCESSES;