您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> GCC 编译 不提示警告或者错误。。。

GCC 编译 不提示警告或者错误。。。

来源:网络整理     时间:2016/7/19 16:02:27     关键词:

关于网友提出的“ GCC 编译 不提示警告或者错误。。。”问题疑问,本网通过在网上对“ GCC 编译 不提示警告或者错误。。。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: GCC 编译 不提示警告或者错误。。。
描述:

#include 
#include 
#include 
int main()
{
        int result = open("test.txt", O_WRONLY , O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IXUSR);
        printf("%d", result);
        return 0;
}
这一段代码 我把其中一个|打成了,
但是用gcc -Wall src.c竟然都不提示任何警告 直接编译通过。。。。 在Windows肯定报错
加了-Wmissing-prototypes -Wmissing-declarations还是没任何警告
运行的话是返回-1
这也太恐怖了吧   还好代码少  否则这种问题要查N久N久阿。。。。


解决方案1:

这是因为open函数是可变参数
它的原型 3楼已经给出
至于编译器是如何处理可变参数的  
首先函数名关联着内部符号表  有一个proto的指针域  它是用来存放参数的类型的  当遇到可变参数时  它都是按照 翻译为  viod 类型的。而编译器在处理参数类型时是会报错的 很显然  这里不是错误。  而当函数进行调用的 它的实参是依次的 从右至左的 存放在栈中。  这里也不会出错 
这就是从编译器内部看  处理一个可变参数的函数  为什么不出错。

解决方案2:

$ man 2 open
......
       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
又查了一下,linux里面的open确实有可变参数的。
int open(char* path, int access, ...);
这个可变参数大概是为了支持man里面提到的两个参数或者三个参数的两种情况,结果呢,连四个参数也不报错了。


以上介绍了“ GCC 编译 不提示警告或者错误。。。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2808056.html

相关图片

相关文章