我使用gcov为项目中的几个文件设置了C / C ++代码覆盖率。可执行文件正在并行运行。这导致一些共享的代码并行运行。
我正在损坏的.da文件或大小为零的.da文件。并行运行是否有问题?
因为两个或多个可执行实例正尝试在同一个.da文件中写入内容,以便为执行中的每个语句写入覆盖率计数?
如果是这样,是否有任何解决方法?
使用的Gcov版本是1.5
我刚开始用C学习网络编程.我做了一些测试,但是我遇到了错误.
我有一个客户:
client.c
#include <string.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
int main(void)
{
struct addrinfo hints, *res;
int sock;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("localhost", "5996", &hints, &res);
sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
connect(sock, res->ai_addr, res->ai_addrlen);
char data[64];
int len = 13;
int br = recv(sock, data, len, 0);
printf("%s\n%s\n%d\n", strerror(errno), data, br);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和服务器:
server.c
#include <string.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h> …Run Code Online (Sandbox Code Playgroud) 现在我已经设置了代码来将我的字符串分成带有分隔符,=和空格的标记.我还想将特殊字符作为标记包含在内.
char * cstr = new char [str.length()+1];
strcpy (cstr, str.c_str());
char * p = strtok (cstr," ");
while (p!=0)
{
whichType(p);
p = strtok(NULL," ,;=");
}
Run Code Online (Sandbox Code Playgroud)
所以现在,如果我打印出一个字符串的标记,就像asd sdf qwe wer,sdf;wer它一样
asd
sdf
qwe
wer
sdf
wer
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像
asd
sdf
qwe
wer
,
sdf
;
wer
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒.谢谢
我得到了一行代码,这非常有用:
void *test;
/*...*/
test = &va_arg(arg_list, int);
Run Code Online (Sandbox Code Playgroud)
我只是尝试这个,正如我想的那样,这是一个宏而不是一个函数,所以它可能会起作用.我并没有真正期待它能够发挥作用,但它完全符合我的要求.
但是现在我不确定这种风格可能发生的地址的生命周期和其他风险.
谁能告诉我为什么使用va_arg这种方式的参考是安全/不安全的?
我有一个测试程序,如果它可以依赖于在Windows上按严格优先级顺序安排的线程,那将会简单得多.我看到一个低优先级线程与更高优先级的线程一起运行,并想知道是否发生了这种情况,因为不同的线程正在不同的处理器内核上进行调度.
有没有办法强制进程中的所有Win32线程使用单个处理器核心? SetThreadAffinityMask看起来可能很有趣,但它的文档并不完全清楚,我不知道如何使用它.
我有一些其他错误的错误,我不明白为什么:
[错误]在程序中迷路'\'223'
[错误]在程序中错误'\ 224'在函数'int readData(GymRecord**)'中:
[错误]'q2'未在此范围内声明
[错误]请求成员'name'在'*(dir +((long long unsigned int)((long long unsigned int)k)*8ull)))',这是非类型'GymRecord*'
[错误]请求成员'age'在'*(dir +((long long unsigned int)((long long unsigned int)k)*8ull)))',这是非类型'GymRecord*'
int readData(struct GymRecord *dir[]){
FILE *fdir=fopen(“q2.txt”,"r");
char buff[MBUFF];
int k=0;
while(k<MDIR && fgets(buff,MBUFF-1,fdir)){
strcpy(dir[k].name,strtok(buff,","));
dir[k].age=atol(strtok(NULL,"\n"));
k++;
}
return(k);
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我乘以0xffffffff2 unsigned int(32位)并将其存储在unsigned long long(64位)中.为什么我没有得到实际输出8589934588.相反,我得到了4294967294.提前致谢.输出:sizeof i = 4 Sizeof J = 8 2xi = 4294967292
/* Code starts here */
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
unsigned int i=4294967294;
unsigned long long j=i*2;
printf("Sizeof i=%d\n", sizeof(i));
printf("Sizeof J=%d\n", sizeof(j));
printf("2xi=%llu\n", j);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这是我的C代码,用gcc编译.
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{
int x=10;
case 1:
printf("%d\n",printf("%d\b",x));
break;
default:
printf("%d\n",printf("%d\b",x));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
printf()应该返回它成功打印的元素数.
printf("%d\b", x)应该自己打印10(因为\ b将打印指针后退一步(10中的数字0)并且之后没有任何内容可以打印.所以它应该只打印10.这是2个字符.现在外部printf会显示2.输出应该是102.我实际看到的输出是2.
如果嵌套printfs是记住打印指针的位置?我的意思是,如果\b内部有一个printf,它将使打印指针落后一步.当控制现在进入外部时printf,记住改变的位置了吗?它会覆盖最后一个角色吗?
这是交易.我想编写一个内核模块,它取决于内核类型(32位或64位).当且仅当内核为32位并且如果内核为64位时应包含的某些代码行,我希望将一些代码行包含在模块中.
对于这种情况,有没有类似#if LINUX_VERSION_CODE <KERNEL_VERSION(2,6,26)的内容?
执行速度n/=10和n=n/10执行速度之间有什么区别吗?
就像n--和--n在他们的执行速度明智也有不同...