[cfe-dev] libclang question

jiyang zhao zjyzhaojiyang at yahoo.com.cn
Sun Dec 5 01:23:59 PST 2010


hi you guys
I just spent some time on libclang, and wrote a test programme, but i met some problems. 

The test programme is as follows:

//clang_test.cpp
#include <clang-c/Index.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int test( int argc, char** argv )
{
    CXIndex Index = clang_createIndex( 0, 0 );
    CXTranslationUnit TU = clang_parseTranslationUnit( Index, 0, argv, argc, 0, 0, CXTranslationUnit_None );

    for( unsigned I=0, N=clang_getNumDiagnostics( TU ); I<N; ++I )
    {
        CXDiagnostic Diag = clang_getDiagnostic( TU, I );

        CXString String = clang_formatDiagnostic( Diag, clang_defaultDiagnosticDisplayOptions() );
        fprintf( stderr, "Diag: %s\n", clang_getCString( String ) );
        clang_disposeString( String );
    }

    clang_disposeTranslationUnit( TU );
    clang_disposeIndex( Index );
    return 0;
}
int main( int argc, char** argv )
{
    test( argc, argv );

    return 0;
}

When I ran the programme on a .h file,  i got the following results:

Diag: ../ckit/ckit_comm.h:28:1: error: unknown type name 'bool'
Diag: ../ckit/ckit_comm.h:32:1: error: unknown type name 'bool'
Diag: ../ckit/ckit_comm.h:43:1: error: unknown type name 'bool'
Diag: ../ckit/ckit_comm.h:51:5: error: conflicting types for 'createTranslationUnit'
Diag: ../ckit/ckit_comm.h:47:5: note: previous declaration is here

The ckit_comm.h :
/* @(#)ckit_comm.h
 */

#ifndef _CKIT_COMM_H
#define _CKIT_COMM_H 1

#include "clang-c/Index.h"

/*
  CXCursor遍历时所用visitor函数的数据类型
 */
struct VisitorData
{
    CXTranslationUnit TU;
    enum CXCursorKind *Filter;
};

extern char* g_szTUDir;
extern char** g_szCommandArgs;
extern int g_nCommandArgsNum;

/*
  判断文件或者目录是否存在.
  返回值:
  true:存在
  false:不存在
 */
bool isExist(const char* szFileName);
/*
  获取文件最后修改时间
 */
bool getFileStamp(const char* szFileName, time_t* iStamp);
/*
  比较两个文件的最后修改时间,比较结果保存到pnResult中。
  比较结果含义:
  0:相等
  -1:szFile1文件时间早
  1:szFile2文件时间早 
  返回值:
  false:比较失败
  true:比较成功,将比较结果保存到pnResult中.
 */
bool checkFilesStamp(const char* szFile1, const char* szFile2, int* pnResult);
/*
  创建文件对应的编译单元(基本无用版)
 */
int createTranslationUnit(const char* szFileName, CXTranslationUnit* piTU);
/*
  创建文件对应的编译单元
 */
int createTranslationUnit(const char* szFileName, int nArgs, char** szArgs, CXTranslationUnit* piTU);
/*
 */
int loadTranslationUnit(const char* szFileName, CXTranslationUnit* piTU);
/*
 */
int loadTranslationUnitFromSource(const char* szFileName, CXTranslationUnit* piTU);
/*
  将TU写到输出文件中
 */
int saveTranslationUnit(CXTranslationUnit TU, const char* szTUDir);

#endif /* _CKIT_COMM_H */

But if I renamed ckit_comm.h to ckit_comm.hpp and ran again, everything was ok. 

Is it my mistake or clang's feature? 
Thand you

PS.
My os is debian sid i386, clang version is r120773 checked from svn.
Sorry for my pool english.



      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20101205/912a6459/attachment.html>


More information about the cfe-dev mailing list