gcc编译警告选项
Ⅰ gcc编译C语言报警告
open
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>蔽高
int open(const char *pathname, int flags);
int open(const char *pathname,
int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
-------------------------
openat
#include <fcntl.h>
int openat(int dirfd, const char *pathname, int flags);
int openat(int dirfd, const char *pathname, int flags, mode_t mode);
-------------------------
lseek
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
你可以看
man 2 open
man 2 openat
man 2 lseek
--------------------------
问题是否为:
#include <宏扒尺sys/types.h>
#include <sys/stat.h>
头此滑文件缺失?
Ⅱ gcc 的编译选项 -MD 是什么意思
MD 是一个参数.
gcc提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
-Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
-Wcomment -Wformat -Wmain (only for C/ObjC and unless
-ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses
-Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
-Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1
-Wswitch -Wtrigraphs -Wuninitialized (only with -O1 and above)
-Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value
-Wunused-variable
unused-function:警告声明但是没有定义的static函数;
unused- label:声明但是未使用的标签;
unused-parameter:警告未使用的函数参数;
unused-variable:声明但 是未使用的本地变量;
unused-value:计算了但是未使用的值;
format:printf和scanf这样的函数中的格式字符 串的使用不当;
implicit-int:未指定类型;
implicit-function:函数在声明前使用;
char- subscripts:使用char类作为数组下标(因为char可能是有符号数);
missingbraces:大括号不匹配;
parentheses: 圆括号不匹配;
return-type:函数有无返回值以及返回值类型不匹配;
sequence-point:违反顺序点的代码,比如 a[i] = c[i++];
switch:switch语句缺少default或者switch使用枚举变量为索引时缺少某个变量的case;
strict- aliasing=n:使用n设置对指针变量指向的对象类型产生警告的限制程度,默认n=3;只有在-fstrict-aliasing设置的情况下有 效;
unknow-pragmas:使用未知的#pragma指令;
uninitialized:使用的变量为初始化,只在-O2时有 效;
Ⅲ DEV C++如何开启wall警告选项
尽管 gcc 编译器的 -Wall 选项涵盖了绝大多数警告标记,依然有一些警告不能生成。为了生成它们,请使用 -Wextra 选项。
比如,下面的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=0;
/* ...
some code here
...
*/
if(i);
return 1;
return 0;
}1234567891011121314
我不小心在 if 条件后面多打了一个分号。现在,如果使用下面的 gcc 命令来进行编译,不会生成任何警告。
gcc -Wall test.c -o test1
但是如果同时使用 -Wextra 选项来进行编译:
gcc -Wall -Wextra test.c -o test1
会生成下面这样一个警告:
test.c: In function ‘main’:
test.c:10:8: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
if(i);123
从上面的警告清楚的看到, -Wextra 选项从内部启用了 -Wempty-body 选项,从而可以检测可疑代码并生成警告。下面是这个选项启用的全部警告标记。
-Wclobbered
-Wempty-body
-Wignored-qualifiers
-Wmissing-field-initializers
-Wmissing-parameter-type (仅针对 C 语言)
-Wold-style-declaration (仅针对 C 语言)
-Woverride-init
-Wsign-compare
-Wtype-limits
-Wuninitialized
-Wunused-parameter (只有和 -Wunused 或 -Wall 选项使用时才会启用)
-Wunused-but-set-parameter (只有和-Wunused或-Wall` 选项使用时才会生成)123456789101112
如果想对上面所提到的标记有更进一步的了解,请查看 gcc 手册。
Ⅳ 请教gcc编译下的几个警告该怎么去除
C 语言源程序中的错误分为几类,其中有:必须要修改的错误(例如:语法错误),这类错误如果不进行修改,那么源程序就无法编译通过和运行;另外还有就是:警告错误(例如:对某个变量没有赋初值就使用它),该类错误就是:编译器能够让你的源程序通过,但是你在运行源程序时,得到的运行结果却未必是正确的(例如:编写一个累加器的程序,如果不对总和进行清零,那么每运行一次,结果可能就会是随机的)。所以说,如果 gcc 编译器下提出了警告错误,你就必须要仔细阅读源程序,找出其相对应的BUG来,这样才能够确保你的程序运行结果是正确的。
Ⅳ gcc编译,出现错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ........
这个我也遇到了,有毕皮以下几种可能:
1,有可能是漏写;}或者将)写成},或者是中英文混写,如将英文的)写成中文的)。
2.机器码本身的问题,需要对数据类型进行typedef,如,使用int类型或者 char类型,分别进行定义,typedef in DTYPE,typedef char PCHAR,这一点没核培试验过,是看别人的
3.没有加上需要的头文件。这一点我碰到了,很神奇。
4.C和C++混编,如在C中使用class inline等,需要加上extern告诉编译器。因为C和C++的编译时找不同的内部代码,如果不告诉他,他会找一种,比如说全部找C的内部解释,那么C++部分的就会出错;
5、明显的错误,比手氏差如c代码,结果写了个函数 bool testIt;而bool默认没有定义,所以报错;改成int的就行了;
Ⅵ gcc编译选项 -w是什么意思
不同版本的动态库是为了升级方便,旧的程序需要与旧的库链接,新的程序与新的.
一般的做法是把libabc.so连接(symbolic link, ln -s libabc.so.N libabc.so)到最新的版本,这样以后的新程序,在用gcc -labc的时候,都会链接到新的版本.旧的已经链接好的程序并不会产生不兼容的问题,因为旧程序在过去已经链接过了(动态库链接的信息可以用ldd来查看: ldd /bin/ls).
symbolic link, ln是推荐的维护版本的办法,不建议更改文件名.
如果你要有一个方便的办法链接旧的版本, 建一个旧的版本的symbolic link就可以了,libabc11.so
ln -s libabc.so.11 libabc11.so
gcc -labc11...
以上回答你满意么?
Ⅶ Xcode 在用gcc编译的时候出现警告
代码的运行编译是从上往下的,出现这个警告的原因是你写的某个函数里面调用了另一个函数,而这个另一个函数是第一次出现,系统辨认不出,当然你是写在了下面。
所以解决这个问题有两个方法:1在代码最上端声明所有函数。 2把该函数内调用的函数写到该函数的上面。