在C SDL的项目我的工作,我typedef编char *到str了可读性.
现在我做的时候:
const str title = SDL_GetWindowTitle(win);
Run Code Online (Sandbox Code Playgroud)
其中SDL_GetWindowTitle返回const char *,我得到:
warning: return discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
Run Code Online (Sandbox Code Playgroud)
将类型更改为时,将删除警告char *:
const char *title = SDL_GetWindowTitle(win);
Run Code Online (Sandbox Code Playgroud)
typedef只是一个类型的别名,对吧?因此,将变量声明为str或char *应该等效,为什么我会收到警告?或者有什么我错过了......?
我在CLI上使用GCC,所以这不是IDE的错.
Thx提前!
在浏览我的GCC标题时stddef.h,我遇到了一种我从未听说过的类型rune_t:
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
#if __BSD_VISIBLE
#ifndef _RUNE_T_DECLARED
typedef __rune_t rune_t; /* <--- Here it is */
#define _RUNE_T_DECLARED
#endif
#endif
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
根据周围的#ifs,我猜它是FreeBSD特有的类型,但它代表什么?
奖金问题:它与符文字母有什么关系吗?
在我正在进行的项目中,我命名了我的一个文件math.h,其中obvisouly也是标准库头的名称.
一切运行良好,直到我开始使用gcc的-I选项:我整理我的文件到不同的目录,比如src,obj和inc页眉.
我结束了类似的事情
gcc ... -Iinc/
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我使用的另一个库(SDL,顺便说一句)#include是标准的 math.h头文件(位于/usr/include/math.h),而GCC给它自己的math.h(在like中找到/home/me/my_project/inc/math.h),显然这不能编译.
所以我的问题是,如何让GCC不认为我的标题是标准的?
当然我可以重命名该文件,但这只是避免了这个问题 - 即使我最终这样做,我希望知道解决方案,以防我再次遇到这个问题.