5

下面是我的代码,它一直告诉我第 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 ('
4

2 回答 2

19

这不是编译器语法错误,而是 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

对不打算执行的文件设置执行权限大多是无害的,但应该避免,因为它会使此类错误更难追踪。

于 2013-08-26T18:35:40.737 回答
1

正如starblue在他的评论中提到的,检查两个包含的头文件中的代码。错误消息应准确告诉您错误发生的位置。查看错误中列出的行之前的一两行,并确保语法正确。此错误几乎总是由前一行中缺少;, (,{等引起的。

于 2013-08-26T17:58:35.750 回答