LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1039|回复: 7

奇怪的事---gcc报语法错, g++行.

[复制链接]
发表于 2006-3-14 14:48:26 | 显示全部楼层 |阅读模式
g++ 可以,gcc报错如下:

gcc -Wall -lGL lglx.c -o lglx
lglx.c: In function 'event_loop':
lglx.c:50: error: syntax error before 'sym'
lglx.c:51: error: 'sym' undeclared (first use in this function)
lglx.c:51: error: (Each undeclared identifier is reported only once
lglx.c:51: error: for each function it appears in.)


  1. //for learn opengl as glx

  2. #include<GL/gl.h>
  3. #include<GL/glx.h>
  4. #include<X11/Xlib.h>
  5. #include<X11/keysym.h>
  6. #include<stdio.h>
  7. #include<stdlib.h>

  8. unsigned int width,height;

  9. void redraw( Display *dpy, Window w )
  10. {
  11.   //printf("Redraw event\n");
  12.   glClear( GL_COLOR_BUFFER_BIT );
  13.   glShadeModel(GL_SMOOTH);
  14.   // Draw the triangle
  15.   glBegin(GL_TRIANGLES);
  16.   // Red Apex
  17.   glColor3ub((GLubyte)255,(GLubyte)0,(GLubyte)0);
  18.   glVertex3f(0.0f,200.0f,0.0f);
  19.   // Green on the right bottom corner
  20.   glColor3ub((GLubyte)0,(GLubyte)255,(GLubyte)0);
  21.   glVertex3f(200.0f,-70.0f,0.0f);
  22.   // Blue on the left bottom corner
  23.   glColor3ub((GLubyte)0,(GLubyte)0,(GLubyte)255);
  24.   glVertex3f(-200.0f, -70.0f, 0.0f);
  25.   glEnd();
  26.   glXSwapBuffers( dpy, w );
  27. }

  28. void resize( unsigned int width, unsigned int height)
  29. {
  30.   //printf("Resize event\n");
  31.    glViewport( 0, 0, width, height );
  32.    glMatrixMode( GL_PROJECTION );
  33.    glLoadIdentity();
  34.    glOrtho( -200.0, 200.0, -200.0, 200.0, -1.0, 1.0 );
  35. }


  36. void event_loop(Display *dpy)
  37. {
  38.   XEvent event;
  39.   while(1){
  40.     while(XPending(dpy)>0){
  41.       XNextEvent(dpy,&event);
  42.       switch(event.type){
  43.       case KeyRelease:
  44.         KeySym sym;
  45.         sym=XLookupKeysym((XKeyEvent*)&event,0);
  46.         if(sym==XK_Escape){
  47.           return;
  48.         }
  49.         break;
  50.       case Expose:
  51.         redraw( dpy, event.xany.window );
  52.         break;
  53.       case ConfigureNotify:
  54.         resize( event.xconfigure.width, event.xconfigure.height );
  55.         break;
  56.       default:
  57.         break;
  58.       }
  59.     }
  60.    
  61.   }
  62. }



  63. int main(int argc, char * argv[])
  64. {
  65.   Display *dpy;
  66.   dpy=XOpenDisplay(NULL);
  67.   width=800;
  68.   height=600;
  69.   int attrib[]={
  70.     GLX_RGBA,
  71.     GLX_DOUBLEBUFFER,
  72.     GLX_RED_SIZE,4,
  73.     GLX_BLUE_SIZE,4,
  74.     GLX_GREEN_SIZE,4,
  75.     None
  76.   };
  77.   
  78.   int scrnum;
  79.   XSetWindowAttributes attr;
  80.   unsigned long mask;
  81.   Window root,win;
  82.   GLXContext ctx;
  83.   XVisualInfo *visinfo;

  84.   scrnum=DefaultScreen(dpy);
  85.   root=RootWindow(dpy,scrnum);
  86.   visinfo=glXChooseVisual(dpy,scrnum,attrib);
  87.   if(visinfo==NULL){
  88.     fprintf(stderr,"Error:Couldn't found a RGBA double buffer visual\n");
  89.     exit(1);
  90.   }

  91.   attr.background_pixel = 0;
  92.   attr.border_pixel = 0;
  93.   attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone);
  94.   attr.event_mask = StructureNotifyMask | ExposureMask | KeyReleaseMask;
  95.   mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
  96.   win = XCreateWindow( dpy, root, 0, 0, width, height,
  97.                        0, visinfo->depth, InputOutput,
  98.                        visinfo->visual, mask, &attr );
  99.   
  100.   ctx = glXCreateContext( dpy, visinfo, NULL, True );
  101.   if (!ctx) {
  102.     printf("Error: glXCreateContext failed\n");
  103.     exit(1);
  104.   }
  105.   
  106.   glXMakeCurrent( dpy, win, ctx );
  107.   XMapWindow(dpy,win);

  108.   resize(width,height);
  109.   event_loop(dpy);
  110.   
  111.   glXDestroyContext(dpy, ctx);
  112.   XDestroyWindow(dpy, win);
  113.   XCloseDisplay(dpy);
  114.   return 0;
  115. }


复制代码
发表于 2006-3-14 15:04:50 | 显示全部楼层
gcc -std=c99 试试 。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 15:07:10 | 显示全部楼层
谢谢sunmoon1997,还是不行, 一样的报错.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 15:07:25 | 显示全部楼层
谢谢sunmoon1997,还是不行, 一样的报错.
回复 支持 反对

使用道具 举报

发表于 2006-3-14 15:17:49 | 显示全部楼层
  1. //for learn opengl as glx
  2. #include<GL/gl.h>
  3. #include<GL/glx.h>
  4. #include<X11/Xlib.h>
  5. #include<X11/keysym.h>
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<unistd.h>
  9. unsigned int width,height;
  10. void redraw( Display *dpy, Window w )
  11. {
  12.   //printf("Redraw event\n");
  13.   glClear( GL_COLOR_BUFFER_BIT );
  14.   glShadeModel(GL_SMOOTH);
  15.   // Draw the triangle
  16.   glBegin(GL_TRIANGLES);
  17.   // Red Apex
  18.   glColor3ub((GLubyte)255,(GLubyte)0,(GLubyte)0);
  19.   glVertex3f(0.0f,200.0f,0.0f);
  20.   // Green on the right bottom corner
  21.   glColor3ub((GLubyte)0,(GLubyte)255,(GLubyte)0);
  22.   glVertex3f(200.0f,-70.0f,0.0f);
  23.   // Blue on the left bottom corner
  24.   glColor3ub((GLubyte)0,(GLubyte)0,(GLubyte)255);
  25.   glVertex3f(-200.0f, -70.0f, 0.0f);
  26.   glEnd();
  27.   glXSwapBuffers( dpy, w );
  28. }
  29. void resize( unsigned int width, unsigned int height)
  30. {
  31.   //printf("Resize event\n");
  32.    glViewport( 0, 0, width, height );
  33.    glMatrixMode( GL_PROJECTION );
  34.    glLoadIdentity();
  35.    glOrtho( -200.0, 200.0, -200.0, 200.0, -1.0, 1.0 );
  36. }
  37. void event_loop(Display *dpy)
  38. {
  39.   XEvent event;
  40.   while(1){
  41.     while(XPending(dpy)>0){
  42.       XNextEvent(dpy,&event);
  43.       switch(event.type){
  44.       case KeyRelease:
  45.          {
  46.           KeySym sym;
  47.           sym=XLookupKeysym((XKeyEvent*)&event,0);
  48.           if(sym==XK_Escape){
  49.             return;
  50.            }
  51.          }
  52.         break;
  53.       case Expose:
  54.         redraw( dpy, event.xany.window );
  55.         break;
  56.       case ConfigureNotify:
  57.         resize( event.xconfigure.width, event.xconfigure.height );
  58.         break;
  59.       default:
  60.         break;
  61.       }
  62.     }
  63.    usleep (10000);
  64.   }
  65. }
  66. int main(int argc, char * argv[])
  67. {
  68.   Display *dpy;
  69.   dpy=XOpenDisplay(NULL);
  70.   width=800;
  71.   height=600;
  72.   int attrib[]={
  73.     GLX_RGBA,
  74.     GLX_DOUBLEBUFFER,
  75.     GLX_RED_SIZE,4,
  76.     GLX_BLUE_SIZE,4,
  77.     GLX_GREEN_SIZE,4,
  78.     None
  79.   };
  80.   
  81.   int scrnum;
  82.   XSetWindowAttributes attr;
  83.   unsigned long mask;
  84.   Window root,win;
  85.   GLXContext ctx;
  86.   XVisualInfo *visinfo;
  87.   scrnum=DefaultScreen(dpy);
  88.   root=RootWindow(dpy,scrnum);
  89.   visinfo=glXChooseVisual(dpy,scrnum,attrib);
  90.   if(visinfo==NULL){
  91.     fprintf(stderr,"Error:Couldn't found a RGBA double buffer visual\n");
  92.     exit(1);
  93.   }
  94.   attr.background_pixel = 0;
  95.   attr.border_pixel = 0;
  96.   attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone);
  97.   attr.event_mask = StructureNotifyMask | ExposureMask | KeyReleaseMask;
  98.   mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
  99.   win = XCreateWindow( dpy, root, 0, 0, width, height,
  100.                        0, visinfo->depth, InputOutput,
  101.                        visinfo->visual, mask, &attr );
  102.   
  103.   ctx = glXCreateContext( dpy, visinfo, NULL, True );
  104.   if (!ctx) {
  105.     printf("Error: glXCreateContext failed\n");
  106.     exit(1);
  107.   }
  108.   
  109.   glXMakeCurrent( dpy, win, ctx );
  110.   XMapWindow(dpy,win);
  111.   resize(width,height);
  112.   event_loop(dpy);
  113.   
  114.   glXDestroyContext(dpy, ctx);
  115.   XDestroyWindow(dpy, win);
  116.   XCloseDisplay(dpy);
  117.   return 0;
  118. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 15:37:12 | 显示全部楼层
Thanks, It does work!
不过为什么呢?
回复 支持 反对

使用道具 举报

发表于 2006-3-14 17:13:28 | 显示全部楼层
C语言不支持在执行语句之后定义变量,而C++可以。
case KeyRelease:
         {
          KeySym sym;
这是错误的,请把变量定义移动函数定义的开始部分。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 19:21:12 | 显示全部楼层
Thanks
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表