2013-08-26 45 views
1

下面是我的代碼,它不斷告訴我,第10行是造成這種「語法錯誤附近意想不到的令牌`('」,但我不明白爲什麼,我添加到一個代碼已經寫好了,但是它說錯誤的部分並不是我添加的內容,所以我對於爲什麼會出現這個錯誤感到困惑,並且我想很好地定義這個錯誤的實際含義。語法錯誤附近意想不到的令牌`''''

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#include "applanix_data.h" 
#include "applanix_pos_out.h" 

#define DEGREES2RADIANS (3.141592654/180.0) 

int output_group_1(FILE *fp,  /* This is line 10 */ 
       FILE *fpout, 
       unsigned short myyear, 
       unsigned short mymonth, 
       unsigned short myday, 
       double time_sod, 
       double double_time_met) 
{ 
struct applanix_data_group1 data1; 
struct pospacsbet sbet; 

if(fread(&data1,sizeof(struct applanix_data_group1),1,fp)==1) 
{ 
    sbet.gpstime = time_sod; 
    sbet.latitude = data1.latitude * DEGREES2RADIANS; 
    sbet.longitude = data1.longitude * DEGREES2RADIANS; 
    sbet.altitude = data1.altitude; 
    sbet.x_velocity = data1.eVelocity; 
    sbet.y_velocity = data1.nVelocity; 
    sbet.z_velocity = data1.dVelocity; 
    sbet.roll = data1.aircraftRoll * DEGREES2RADIANS; 
    sbet.pitch = data1.aircraftPitch * DEGREES2RADIANS; 
    sbet.platform_heading = data1.aircraftHeading * DEGREES2RADIANS; 
    sbet.wander_angle = data1.aircraftWanderAngle * DEGREES2RADIANS; 
    sbet.x_body_acceleration = data1.aircraftTransverseAcceleration; 
    sbet.y_body_acceleration = data1.aircraftLongitudinalAcceleration; 
    sbet.z_body_acceleration = data1.aircraftDownAcceleration; 
    sbet.x_body_angular_rate = data1.aircraftAngularRateAboutDownAxis; 
    sbet.y_body_angular_rate = data1.aircraftLongitudinalAcceleration; 
    sbet.z_body_angular_rate = data1.aircraftAngularRateAboutDownAxis; 

    if(fwrite(&sbet,sizeof(struct pospacsbet),1,fpout)!=1) 
     { 
     fprintf(stderr,"Error writing POSPAC SBET output!\n"); 
     exit(-2); 
     } 

    sbet.latitude1 = sbet.latitude * (180/3.141592654); 
    sbet.longitude1 = sbet.longitude * (180/3.14592654); 
    sbet.day = sbet.gpstime/86400; 
    sbet.time = sbet.gpstime/86400; 
    sbet.hour1 = (sbet.time - sbet.day); 
    sbet.hour = sbet.hour1*24; 
    sbet.time = sbet.hour1*24; 
    sbet.minute1 = (sbet.time - sbet.hour); 
    sbet.minute = sbet.minute1*60; 
    sbet.time = sbet.minute1 * 60; 
    sbet.second1 = (sbet.time - sbet.minute); 
    sbet.second = sbet.second1*60; 


    printf("%12.8f, %12.8f, %6.3f, %i:%i:%4.2f\n",sbet.longitude1,sbet.latitude1,sbet.altitude,sbet.hour, sbet.minute, sbet.second); 
    return 0; 
} 
else 
    return -1; 
} 

編輯OP的評論進入正題

unix> g++ applanixraw2out.c 
unix> ./applanixraw2out.c applanix_raw_20120508.bin > test.txt 
./applanixraw2out.c: line 10: syntax error near unexpected token (' 
+11

'applanix_pos_out.h'結尾可能有一個錯誤。 – starblue

+0

錯誤出現在此代碼之前。我剛剛用'clang -Wall -c'編譯了它,它編譯得很好,沒有任何錯誤或警告。 – 2013-08-26 17:56:07

+0

它不是當我編譯它,我得到的錯誤,這是當我試圖運行它 – user2718341

回答

1

由於starblue在他的評論中提到,請檢查兩個包含的頭文件中的代碼。錯誤消息應該告訴你到底發生錯誤的位置。查看之前的一行或兩行錯誤中列出的行,並確保語法正確。這個錯誤幾乎總是由上一行中缺少的;,(,{等造成的。

+0

好猜,但那不是,請看我的答案。 –

+0

是的,你是對的!有一個upvote:D –

+0

公平地說,這是*之前發佈*我們意識到海報試圖直接運行源代碼。 –

11

這不是編譯器語法錯誤,它是一個shell錯誤。

您正試圖直接執行您的C源代碼。系統假定該文件是一個shell腳本。

你需要把它編譯成可執行文件,然後運行可執行文件:

$ gcc applanixraw2out.c -o applanixraw2out 
$ ./applanixraw2out [arguments] 

在評論,你說你做了以下內容:

unix> g++ applanixraw2out.c 
unix> ./applanixraw2out.c applanix_raw_20120508.bin > test.txt 
./applanixraw2out.c: line 10: syntax error near unexpected token (' 

g++命令是C++碼;你的代碼是C,所以你應該使用gcc

您必須指定可執行文件的名稱,這是最常見的源文件名,其中.c被刪除。如果您不這樣做,則g++gcc默認情況下會生成一個名爲a.out的可執行文件(由於歷史原因)。使用-o選項可以覆蓋該默認值。

此外,爲了得到那個語法錯誤,你一定是做了這樣的:

$ chmod +x applanixraw2out.c 

設置上是註定不會被執行爲mostly harmless文件執行權限,但因爲它可以應避免使這樣的錯誤更難追蹤。

相關問題