Modified: char StrContains(const char *str, const char *sfind).
BLOCKQUOTE>
所有警告都消失了。
只需为g ++使用-w选项
例:
g ++ -w -o simple.o simple.cpp -lpthread
请记住,这不会避免弃用,而是会阻止在终端上显示警告消息。
现在,如果您真的想避免过时,请使用const关键字,如下所示:
1
| const char* s="constant string"; |
看到这种情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| typedef struct tagPyTypeObject
{
PyObject_HEAD;
char *name;
PrintFun print;
AddFun add;
HashFun hash;
} PyTypeObject;
PyTypeObject PyDict_Type=
{
PyObject_HEAD_INIT(&PyType_Type),
"dict",
dict_print,
0,
0
}; |
监视名称字段,在gcc中会毫无警告地进行编译,但是在g ++中,它将不知道为什么。
您还可以通过调用strdup()从字符串常量创建可写字符串。
例如,此代码生成警告:
但是,以下代码不会(将字符串传递给putenv之前在堆上进行复制):
1
| putenv(strdup("DEBUG=1")); |
在这种情况下(也许在其他大多数情况下),关闭警告是一个坏主意,它的存在是有原因的。另一种选择(默认情况下使所有字符串都可写)可能效率不高。
听听编译器告诉您的内容!
谢谢大家的帮助。从这里挑选到那里就是这个解决方案。这样编译干净。尚未测试代码。也许明天吧...
1 2 3 4 5 6
| const char * timeServer[] = {"pool.ntp.org" }; // 0 - Worldwide
#define WHICH_NTP 0 // Which NTP server name to use.
...
sendNTPpacket(const_cast<char*>(timeServer[WHICH_NTP])); // send an NTP packet to a server
...
void sendNTPpacket(char* address) { code } |
我知道,timeServer数组中只有1个项目。但是可能还有更多。其余的已被注释掉以节省内存。
为什么不使用-Wno-deprecated选项忽略不推荐使用的警告消息?
The problem right now is that I'm running with -Werror
IMO,这是您的真正问题。您可以尝试一些从(char *)转换为(const char *)的自动化方法,但是我会花钱在它们上,而不仅仅是工作。您将需要一名人员参与至少一些工作。
在短期内,只需忽略警告(但IMO保持警告状态,否则它将永远无法解决),然后删除-Werror。
将字符串声明为const将解决问题:
1
| char const*s ="constant string"; |
BlackShift的答案非常有帮助,我使用它的方式是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| extern string execute(char* cmd) {
FILE* pipe = popen(cmd,"r");
if (!pipe) return"ERROR";
char buffer[256];
std::string result ="";
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}
int main(){
char cmd[]="grep -A1 'xml' out1.txt | grep read|awk -F'=' 'BEGIN{sum=0}{sum=sum+$NF}END{print sum}'";
string result=execute(cmd);
int numOfBytes= atoi(result.c_str());
cout<<"Number of bytes ="<<numOfBytes<<endl;
return 0;
} |
1 2 3 4 5 6 7 8 9 10 11
| PyTypeObject PyDict_Type=
{ ...
PyTypeObject PyDict_Type=
{
PyObject_HEAD_INIT(&PyType_Type),
"dict",
dict_print,
0,
0
}; |
监视名称字段,在gcc中会毫无警告地进行编译,但是在g ++中,它将不知道为什么。
在gcc (Compiling C)中,默认情况下-Wno-write-strings是活动的。
g++ (Compiling C++)中的-Wwrite-strings默认情况下处于活动状态
这就是为什么会有不同的行为的原因。
对于我们来说,使用Boost_python宏会生成此类警告。
因此,在编译C ++时我们使用-Wno-write-strings,因为我们始终使用-Werror