`
sogotobj
  • 浏览: 648940 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

xcode4.2中更严格的语法检查--我自己的第一个opengl程序

 
阅读更多

声明:我下面的内容是使用Lion系统+Xcode4.2环境下做的,如果你是其他的系统和Xcode会有所不同。

很多时候,我们必须自己动手写程序,甚至是抄程序才能学好一门技术。下面我以一个opengl程序为例来讲述xcode4.2中更严格的语法检查

打开xcode,新建一个项目。选择Mac OS X下面的application,选择Command Line Tool


选择next,然后输入工程的名字,选择c语言


缺省生成的代码如下:

#include <stdio.h>


int main (int argc, const char * argv[])

{


// insert code here...

printf("Hello, World!\n");

return 0;

}



我们加入一些简单的代码,代码就不解释了,在前面的文章中有提到

#include <stdio.h>

#include <GLUT/GLUT.h>

void DisplayF()

{

glClear(GL_COLOR_BUFFER_BIT);

glFlush();

}

void setupRC()

{

glClearColor(0.1, 1.0, 1.0, 1.0);

}


int main (int argc, const char * argv[])

{


// insert code here...

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);

glutCreateWindow("test");

glutDisplayFunc(DisplayF);

setupRC();

glutMainLoop();

return 0;

}


上面的代码在编译的时候有三个警告和8个链接错误。我们需要先解决链接错误。这些链接错误是由于我们没有加入链接库。如下图


加入OpenGL.framework和GLUT.framework。

再次编译发现程序可以运行了,但是有三个警告。很多程序员习惯忽略警告,这是一个很不好的习惯,有些时候,警告可能是一个严重的会在运行的时候引起问题的错误,即使只是普通的警告,我们也应该消灭它。做为一个专业的程序员,我们必须养成这样的好习惯。

我们先看看这三个警告是什么

No previous prototype for function 'DisplayF'

No previous prototype for function 'setupRC'

Passing 'const char **' to parameter of type 'char **' discards qualifiers in nested pointer types

可以看出前两个警告是一样的,就是没有找到函数的原型声明,第三个是因为参数的修饰符引起的,第三个最好改,只需要把

int main (int argc, const char * argv[])

改为:

int main (int argc, char * argv[])

前两个我们需要加入一个头文件,比如func.h,然后放入这两个函数的声明,

#ifndef tgl0002_func_h

#define tgl0002_func_h


void DisplayF();


void setupRC();


#endif


然后在main.c中引入这个头文件,但是我们会发现还是有两个警告。经过试验后,问题在于:两个函数都没有参数,习惯性的在参数列表的地方什么都不写,现在在四个地方都加入void既可。这就是xcode4.2更严格的语法检查的一部分。最后形成的代码如下:

func.h


#ifndef tgl0002_func_h

#define tgl0002_func_h


void DisplayF(void);


void setupRC(void);


#endif



main.c

#include <stdio.h>

#include <GLUT/GLUT.h>

#include "func.h"

void DisplayF(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glFlush();

}

void setupRC(void)

{

glClearColor(0.1, 1.0, 1.0, 1.0);

}


int main (int argc, char * argv[])

{


// insert code here...

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);

glutCreateWindow("test");

glutDisplayFunc(DisplayF);

setupRC();

glutMainLoop();

return 0;

}



现在程序正常工作了,并且源代码中没有一个警告。

分享到:
评论

相关推荐

    iOS5开发基础教程 Xcode4.2

    - **第二章:安抚图腾神** - 介绍Xcode4.2的安装和配置,以及如何创建第一个iOS项目。 - **第三章:处理基本交互** - 探讨用户界面元素的基本交互方式,包括按钮点击、滑动等操作。 - **第四章:更多的用户界面乐趣*...

    Beginning.iOS.5.Development

    - 创建第一个iOS应用。 - 界面布局与基本控件的使用。 3. **处理基本交互**(第3章) - **章节概要**:讲解如何实现简单的用户交互,如按钮点击响应等。 - **重点内容**: - 用户事件处理机制。 - 触摸事件...

    iPhone开发基础教程PDF(含源代码)

    第1章 欢迎来到iPhone的世界  1.1 关于本书  1.2 必要条件  1.3 必备知识  1.4 编写iPhone应用程序有何不同  1.4.1 只有一个正在运行的应用程序  1.4.2 只有一个窗口  1.4.3 受限访问  1.4.4 有限的响应时间...

    cocos2d-x权威指南完整版

    - **创建第一个游戏项目**:通过Cocos Creator CLI快速创建项目模板。 - **添加精灵与背景图**:利用sprite类加载并显示游戏资源。 - **实现简单动画**:通过action类实现角色移动、旋转等动画效果。 - **编写事件...

    [iOS5开发基础教程].(Beginning.iOS.5.Development.Exploring.the.iOS.SDK.E文文字版

    - **增长趋势**:随着iOS平台的发展,越来越多的人在日常生活中依赖移动应用软件,这使得iOS成为一个极具吸引力的开发平台。 #### 二、iOS开发环境搭建 - **账号注册**:首先需要在苹果官方网站上注册开发者账号。 ...

    iphone3开发基础教程

    第1章 欢迎来到iPhone的世界 1 1.1 关于本书 1 1.2 必要条件 1 1.3 必备知识 3 1.4 编写iPhone应用程序有何不同 4 1.4.1 只有一个正在运行的应用程序 4 1.4.2 只有一个窗口 4 1.4.3 受限访问 5 1.4.4 有限的响应时间...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    第1章 Android平台上的C++入门 1 1.1 Microsoft Windows 1 1.1.1 在Windows平台上下载并安装JDK开发包 2 1.1.2 在Windows平台上下载并安装Apache ANT 5 1.1.3 在Windows平台上下载并安装Android SDK 7 1.1.4 在...

    Xamrin Android开发实战 源代码

    第2章 编写第一个Xamarin.Forms应用程序 42 2.1 首次启动Visual Studio 2015 42 2.2 更新Xamarin 44 2.2.1 更新Windows版的Xamarin开发工具 44 2.2.2 更新OS X版的Xamarin开发工具Xamarin.iOS 45 2.3 创建项目...

Global site tag (gtag.js) - Google Analytics