小编Vik*_*oel的帖子

头文件中的全局变量

我有一个2模块(.c文件)和一个.h头文件:

file1.c中:

#include <stdio.h>
#include "global.h"

int main()
{
    i = 100;
    printf("%d\n",i);
    foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

file2.c中

#include <stdio.h>
#include "global.h"

void foo()
{
    i = 10;
    printf("%d\n",i);
}
Run Code Online (Sandbox Code Playgroud)

global.h

int i;
extern void foo()
Run Code Online (Sandbox Code Playgroud)

当我做gcc file1.c file2.c一切正常,我得到了预期的输出.现在,当我将头文件中的变量'i'初始化为0并再次编译时,我得到一个链接器错误:

/tmp/cc0oj7yA.o:(.bss+0x0): multiple definition of `i'
/tmp/cckd7TTI.o:(.bss+0x0): first defined here
Run Code Online (Sandbox Code Playgroud)

如果我只是通过头文件中的初始化(即gcc file1.c)编译file1.c(删除对foo()的调用),一切正常.到底是怎么回事?

c

50
推荐指数
4
解决办法
12万
查看次数

Rust 中漂亮的打印结构

如何打印结构体和数组?- 如何漂亮地打印 Rust 结构或任何数据类型?

当然,可以编写自定义的 Debug 方法。但是有什么方法可以默认启用打印吗?

一种选择是使用:https ://docs.rs/pretty-trait/latest/pretty_trait/

rust

23
推荐指数
1
解决办法
2万
查看次数

使用纯Ant实现if else条件(检查命令行输入)

我是Ant的新手.我的ant脚本从命令行接收名为" env " 的用户输入变量:

例如 ant doIt -Denv=test

用户输入值可以是" test "," dev "或" prod ".

我也有" doIt"目标:

<target name="doIt">
  //What to do here?
</target>
Run Code Online (Sandbox Code Playgroud)

在我的目标中,我想为我的ant脚本创建以下if else条件:

if(env == "test")
  echo "test"
else if(env == "prod")
  echo "prod"
else if(env == "dev")
  echo "dev"
else
  echo "You have to input env"
Run Code Online (Sandbox Code Playgroud)

那是检查用户从命令行输入的值,然后相应地打印一条消息.

我知道使用ant-Contrib,我可以编写ant脚本<if> <else>.对于我的项目,我想使用纯Ant来实现if else条件.可能,我应该使用<condition>?? 但我不确定如何使用<condition>我的逻辑.有人可以帮我吗?

ant

15
推荐指数
1
解决办法
3万
查看次数

httperf在ubuntu 12.04上给出了警告打开文件描述符,但在Ubuntu 10.04中没有

我使用httperf运行负载测试几周并收到此错误 -

httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE
when I fire query from OS - Ubuntu 12.04 LTS (64 bit machine). 
Run Code Online (Sandbox Code Playgroud)

但是,如果我从具有OS的32位机器上运行相同的命令 - 10.04 LTS; 我没有收到错误消息.

此外,我确实按照其他帖子尝试使用"ulimit -n"命令增加文件描述符大小限制,并尝试使用

/usr/include/bits/typesizes.h
Run Code Online (Sandbox Code Playgroud)

#define __FD_SETSIZE 65535

但方法失败了.

有人可以建议吗?

观察:
无需在32台机器上进行任何更改(使用Ubuntu 10.10),那么Ubuntu 12.04的真正区别是什么?此外,我尝试了不同的机器(所有64位架构都有相同的问题)

httperf ubuntu-10.10 ubuntu-12.04

11
推荐指数
1
解决办法
1301
查看次数

在C程序中获取系统命令输出

有没有更好的方法呢?

int numOfCPU;
system("grep -c ^processor /proc/cpuinfo >> /tmp/cpuinfo");
FILE *fp = fopen("/tmp/cpuinfo", "r");
fscanf(fp, "%d", &numOfCPU);
fclose(fp);
system("rm /tmp/cpuinfo");
Run Code Online (Sandbox Code Playgroud)

我不想创建中间文件然后将其删除.

编辑:

它不是从文件中读取.命令可以是"ls"或"echo'Hello world'"

c unix io operating-system

8
推荐指数
1
解决办法
2万
查看次数

向量对上lower_bound的实现

我知道我们需要包括一些比较功能才能实现此目的。

但无法为此写。

例如:

向量的元素={(2,4),(4,2),(5,1),(5,3)}

找到= 5

lower_bound()应该返回2

代码->

#define pp pair<int,int>

bool cmp(const pp &l,const pp &r) {
    return l.first < r.first;
}

int main() {
   vector<pp> v;
   sort(v.begin(), v.end(), cmp);
   int id=(int)(lower_bound(v.begin(), v.end(), ??) - v.begin());
}
Run Code Online (Sandbox Code Playgroud)

c++ vector lower-bound std-pair

5
推荐指数
2
解决办法
1万
查看次数

Intellij IDEA 15 如何打开多个窗口,每个窗口都是独立的

目前有两个项目。我想为每个项目打开一个单独的窗口。

怎么做?

intellij-idea

5
推荐指数
1
解决办法
1万
查看次数

SQLboiler 不在子句中

我正在尝试按照 sqlboiler ( https://github.com/volatiletech/sqlboiler ) 中的示例进行操作。但是,我找不到获得等效NOT IN查询的方法。

users, err := models.Users(
  Select("id", "name"),
  Where("age > ?", 30),
  AndIn("c.kind in ?", "visa", "mastercard"),
).All(ctx, db)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,如果我们能得到一个操作AndNotIn,那就太好了。

谢谢!

sql orm go sqlboiler

5
推荐指数
1
解决办法
1229
查看次数

警告:函数的隐式声明——为什么我的代码仍然有效?

我经历了以下线程:

可能我的问题是相关的。但是,虽然他们提供了应该在使用函数之前声明函数原型的解决方案,但我想探索当函数名称不匹配时会发生什么。在我的测试中,它仍然可以正常工作。

主 C 文件

#include "node.h"
int main(){
    nd *head=NULL;
    nd *tail=NULL;

    create_node(&head, &tail, 10);
    create_node(&head, &tail, 20);
    create_node(&head, &tail, 15);
    create_node(&head, &tail, 35);
    create_node(&head, &tail, 5);
    create_node(&head, &tail, 25);
    print_list(head, tail);
    create_node(&head, &tail, 55);
    create_node(&head, &tail, 52);
    create_node(&head, &tail, 125);

    printf("%d\n",tail->data);
    printf("%d\n",head->data);
    print_list(head, tail);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

node.h 文件

#ifndef NODE_H
#define NODE_H

#include<stdio.h>
#include<stdlib.h>

typedef struct node{
    int data;
    struct node *next;
    struct node *prev;
}nd;

void insert_node(nd **head, nd **tail, int data); …
Run Code Online (Sandbox Code Playgroud)

c warnings function implicit-declaration

4
推荐指数
2
解决办法
3804
查看次数

使用 vec 宏创建特定数据类型的 Vec 的惯用方法是什么?

类似的东西let v = vec![1, 2, 3];会默认为i32,但我想将类型指定为u8.

一种替代方法是使用以下命令创建:

let v: Vec<u8> = vec![1, 2, 3];
Run Code Online (Sandbox Code Playgroud)

或者

let v: Vec<u8> = Vec::new();
v.push(1);
v.push(2);
v.push(3);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法直接使用宏?在这两种情况下,我都需要声明一个变量。

有时,我需要在语句中使用向量assert。如果有办法避免创建变量,我可以写:

pub fn func1() -> &[u8] {
  // return slice [1, 2, 3] of [u8];
}
assert_eq!(vec![1, 2, 3], func1());
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
1
解决办法
2533
查看次数