例如:
Bool NullFunc(const struct timespec *when, const char *who)
{
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我能够对/*...*/参数进行评论.但当然不是在C中,它给了我错误error: parameter name omitted.
自从我多年前意识到这一点,默认情况下这不会产生错误(至少在GCC中),我一直想知道为什么?
我知道您可以发出编译器标志来产生警告,但是它不应该总是出错吗?为什么非void函数没有返回值才有效?
评论中要求的示例:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...编译.
嗨,我正在尝试编写一个程序,可以逐行,逐字或逐字符地比较两个文件.它必须能够读入命令行选项"-l -w -i或 - "...如果选项是-l,它会逐行比较文件.如果选项是-w,它会逐字比较文件.如果选项是 - 它会自动假定下一个arg是第一个文件名.如果选项是-i,则以不区分大小写的方式对它们进行比较.否则,它默认按字符比较文件
只要-w和-l没有同时输入且没有多于或少于2个文件,输入选项的时间并不重要.
我甚至不知道从哪里开始解析命令行参数.请帮忙 :(
所以这就是我想出的所有代码.我还没有错误检查它,但我想知道我是否以过于复杂的方式写东西?
/*
* Functions to compare files.
*/
int compare_line();
int compare_word();
int compare_char();
int case_insens();
/*
* Program to compare the information in two files and print message saying
* whether or not this was successful.
*/
int main(int argc, char* argv[])
{
/*Loop counter*/
size_t i = 0;
/*Variables for functions*/
int caseIns = 0;
int line = 0;
int word = 0;
/*File pointers*/
FILE *fp1, *fp2; …Run Code Online (Sandbox Code Playgroud) 与此MSVC预处理器代码最接近的GCC是什么?
#pragma warning( push ) // Save the current warning state.
#pragma warning( disable : 4723 ) // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop ) // Restore warnings to previous state.
Run Code Online (Sandbox Code Playgroud)
我们在常用的标题中包含代码,我们不希望生成特定的警告.但是,我们希望包含这些标头的文件继续生成该警告(如果项目启用了该警告).
在C(而不是C++)中实现编译时静态断言的最佳方法是什么,特别强调GCC?
我想对特定包含文件直接或间接包含的所有文件禁用特定警告.例如,我想禁用警告"你正在为字符串文字指定一个字符串文字*",包括a所包含的文件所包含的所有文件或文件#include <bar/*>(在我的情况下,明星意味着"任何东西可能在这里").
原因是,我必须编程的一些人不能使用"const",所以最后我得到很多关于特定字符串文字滥用的警告.我想忽略来自他们代码的成千上万的警告,所以我可以专注于我自己的代码中的错误并修复它们.
我使用的是英特尔C++和GCC.我的一些伙伴使用clang,所以我很乐意听到解决方案.
在Microsoft编译器上,可以使用#pragma禁用特定警告,而不禁用其他警告.如果编译器警告"必须完成"的事情,这是一个非常有用的功能.
GCC此时是否有类似功能?这似乎是一个显而易见的功能,它无法想象它还没有这个功能,但网上的旧信息表明这个功能不存在.
在GCC中使用什么?
具体来说,我喜欢使用多字符常量,比如'abc'.这些有效地评估为基数256 - 这是一个非常方便的功能,但它会触发警告.它非常便于在case语句中切换四个字符串.
我想抑制来自g ++的特定警告.我知道这面-Wno-XXX旗帜,但我正在寻找更具体的东西.我想要一些警告-Weffc++,但不是全部.像你可以用lint做的事情 - 禁用特定的消息.
在gcc中有内置的方法可以做到这一点吗?我是否必须编写包装脚本?
我们最近启用-Wall了一个项目.当GCC处于4.7或更高(或Clang)时启用它,因为我们可以GCC diagnostic用来管理提升警告的输出.我们希望从源代码管理它们,而不是通过命令行参数.(我们不想污染命令行,或者要求库用户重新发现需要的内容).
下GCC 4.8和5.1,我们正在捕捉的用于GCC诊断块中禁用的警告-Wunused-variable,-Wunused-value,-Wunused-function和-Wunknown-pragmas.两个GCC都接受-fopenmp,并且都定义_OPENMP为响应它,所以我相当肯定它我们永远不应该看到-Wunknown-pragmas响应#prgam omp ...(它被禁用,但它不是未知).
g++ -DNDEBUG -g2 -O3 -Wall -march=native -pipe -c nbtheory.cpp
nbtheory.cpp:655:0: warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
#pragma omp parallel
^
nbtheory.cpp:656:0: warning: ignoring #pragma omp sections [-Wunknown-pragmas]
#pragma omp sections
^
...
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,文件nbtheroy.cpp具有以下保护措施以帮助管理该警告(仅显示相关部分,但您可以从GitHub链接中查看所有内容):
// Defines GCC_DIAGNOSTIC_AWARE if GCC 4.7 or above.
#include <misc.h> …Run Code Online (Sandbox Code Playgroud) gcc ×7
c ×5
c++ ×5
g++ ×2
pragma ×2
assert ×1
compile-time ×1
gcc-warning ×1
llvm ×1
objective-c ×1
openmp ×1
xcode ×1