2013-01-12 162 views
0

我是C的新手(如2天前開始),由於語法的原因我有編譯問題,但是我從gcc獲得的錯誤消息對我幫助不大。我彙編如下:gcc -ansi -Wall -pedantic line.c編譯錯誤C:錯誤:'。'之前的預期表達式

整個事情是一個簡單的介紹性的練習從我的101類。這些值只是相互測試,以確保它們在line_test.c文件中正確分配。但在解決這個問題之前,我需要解決這個問題。

這裏是我的代碼:

#include "line.h" 

struct line2d create_line2d (double x1, double y1, double x2, double y2) { 
    struct line2d line; 
    line.x1=1; 
    line.y1=2; 
    line.x2=3; 
    line.y2=4; 
    return line; 
} 

和line.h代碼:

#ifndef line 
#define line 

struct line2d { 
    double x1; 
    double y1; 
    double x2; 
    double y2; 
}; 

struct line2d create_line2d(double x1, double y1, double x2, double y2); 

#endif 

,這裏是你定義它拋出

line.c: In function ‘create_line2d’: 
line.c:5: error: expected expression before ‘.’ token 
line.c:6: error: expected expression before ‘.’ token 
line.c:7: error: expected expression before ‘.’ token 
line.c:8: error: expected expression before ‘.’ token 
line.c:9: warning: ‘return’ with no value, in function returning non-void 
+4

什麼是'line2d'的定義? – fge

+2

[WorksForMe](http://liveworkspace.org/code/4yQFKj$0)...請提供您的代碼和編譯過程的更多細節。 – Mankarse

+0

它看起來最像你正在編輯一個不同於你正在建立的文件 - 檢查你的目錄是否匹配,並且所有東西都是排列在一起,等等。 –

回答

9

在頭文件中的錯誤line沒什麼。在C文件中使用它,預處理器將line的每個實例都替換爲空。因此,基本上,你試圖編譯:

struct line2d create_line2d (double x1, double y1, double x2, double y2) { 
    struct line2d line; 
    .x1=1; 
    .y1=2; 
    .x2=3; 
    .y2=4; 
    return ; 
} 

很顯然,這是行不通的:)

你應該總是使用一些字符串,永遠不會被其他地方用於#ifdef後衛。類似LINE__H___會是更好的選擇。

#ifndef LINE__H___ 
#define LINE__H___ 

struct line2d { 
    double x1; 
    double y1; 
    double x2; 
    double y2; 
}; 

struct line2d create_line2d(double x1, double y1, double x2, double y2); 

#endif//!LINE__H___ 

在較新版本的編譯器常見的,你可以使用#pragma once,避免整個名稱衝突問題徹底。

+3

你的回答是正確的,但'___ LINE__H ___'是一個非常糟糕的選擇。以兩個下劃線或下劃線和大寫字母開頭的標識符保留供實施使用。使用'LINE_H'或類似的東西。 –

+1

爲什麼-1?這是正確的答案。 – Inisheer

+0

啊。謝謝。我知道了。我確實看到定義必須是'#ifndef symbol name' – Andrew

2

你在頭部完成了#define line - 所以預處理器用「」(無)替換line

所以你的C代碼:

.x1=1; 

也許最好的辦法是讓納入保護定義的東西更獨特:INCLUDE_GUARD_LINE_H,也許。無論如何,它應該是大寫。

相關問題