我想编译以下文件(temp.cpp):
#include <iostream>
class Foo {
public:
Foo() = default;
};
int main(){
std::cout << "Works!" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令: clang++ temp.cpp -o temp -std=c++11 -Weverything -Werror
有一个错误:
temp.cpp:5:11:错误:默认函数定义与C++ 98不兼容[-Werror,-Wc ++ 98-compat]
我知道有一个类似c ++ 98-compat的警告,它是一切的一部分.如何启用除c ++ 98-compat之外的所有警告?-Weverything是否有c ++ 11兼容标志?
让我们考虑以下示例:
#include <stdio.h>
void func(unsigned char c) {
printf("0x%x\n", c);
}
int main() {
int val = 0x11223344;
func(val);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,有没有办法我可以强制gcc,也没有clang,以示对语句的警告,func(val)对缩小int- > unsigned char会发生在那里.甚至没有编译-Wall -Wextra -pedantic.这个问题主要针对C代码,但也值得C++在讨论中包括世界(见下面的注释).
我很清楚C++使用统一初始化语法存在一种解决方法:
func({val});
Run Code Online (Sandbox Code Playgroud)
但是,这并没有解决我的问题,因为:
{}在任何地方使用编译C或C++编码时是否有任何神秘的选项可以实现?我很好也与非标准的解决方案,只要它的工作原理gcc和clang它并没有需要改变的代码.注意:我不是在寻找C++使用包含或不包含原始类型的宏的自定义整数类型的棘手解决方案.我正在寻找像命令行选项或pragma.同样,问题主要是针对C代码,但也值得探索任何C++解决方案.