小编sta*_*ify的帖子

GCC:为什么常量变量没有放在.rodata中

我一直认为GCC会将static const变量放到ELF或此类文件的.rodata段(或.text优化段).但似乎并非如此.

我目前gcc (GCC) 4.7.0 20120505 (prerelease)在使用GNU/Linux的笔记本电脑上使用.它确实将一个静态常量变量放在.bss段中:

/*
 * this is a.c, and in its generated asm file a.s, the following line gives:
 *   .comm a,4,4 
 * which would place variable a in .bss but not .rodata(or .text)
 */
static const int a;

int main()
{
    int *p = (int*)&a;
    *p = 0;  /* since a is in .data, write access to that region */
             /* won't trigger an exception …
Run Code Online (Sandbox Code Playgroud)

c memory gcc const readonly

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

将依赖项添加到现有make目标

条件0:

说,我有几个源代码,a.c, b.c, ..., z.c我想要一个规则来编译它们.这是一个解决方案:

%.o: %.c
    $(CC) -c -o $@ $(CFLAGS) $<
Run Code Online (Sandbox Code Playgroud)

条件1:

然后,我介绍了一个标题c.h中使用c.c,而另一头e.h在使用c.ce.c,事情变得复杂:

%.o: %.c
    $(CC) -c -o $@ $(CFLAGS) $<

c.o: c.c c.h e.h
    $(CC) -c -o $@ $(CFLAGS) $<

e.o: e.c e.h
    $(CC) -c -o $@ $(CFLAGS) $<
Run Code Online (Sandbox Code Playgroud)

我的问题:

根据条件1的溶液,有像add_dependencymake简化溶液,将获得类似下面的一个?

%.o: %.c
    $(CC) -c -o $@ $(CFLAGS) $<

add_dependency(c.o, c.h e.h)
add_dependency(e.o, e.h)
Run Code Online (Sandbox Code Playgroud)

或者,您认为条件1的更好解决方案是什么?

编辑:

感谢亲切的通知@ctheo :)
是的,我确实看过autotools并了解到它将满足我的所有需求.不过我正在处理的是现有的项目和它 …

makefile

7
推荐指数
1
解决办法
2748
查看次数

修改了vector之后对vector.back()的引用的奇怪行为

让我们从C++中的示例代码开始:

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> vec;
    vec.push_back(0);
    for (int i = 1; i < 5; i++)
    {
        const auto &x = vec.back();
        std::cout << "Before: " << x << ", ";
        vec.push_back(i);
        std::cout << "After: " << x << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码是用g++ test.cc -std=c++11 -O0以下编译的,结果如下:

Before: 0, After: 0
Before: 1, After: 0  
Before: 2, After: 2
Before: 3, After: 3
Run Code Online (Sandbox Code Playgroud)

我期待第二行输出

Before: 1, After: 1
Run Code Online (Sandbox Code Playgroud)

因为x是对向量中的项的引用,不应通过向向量附加项来修改该项.

但是我现在还没有阅读反汇编代码或进行任何其他调查.此外,我不知道这是否是语言标准中的未定义行为.

我想要解释一下.谢谢.

c++ reference vector c++11

6
推荐指数
1
解决办法
314
查看次数

Python子进程安全性

我理解为什么如果你有不受信任的输入,使用'shell = True'可能会带来安全风险.但是,我不明白'shell = False'是如何避免同样的风险的.

假设我想允许用户提供他可能输入的输入:var ="rm -rf /"

我的代码可能只是:

subprocess.call(var,shell=True) # bad stuff
Run Code Online (Sandbox Code Playgroud)

或者我可能会这样做:

varParts=var.split()
subprocess.call(varParts,shell=False) # also bad, right?
Run Code Online (Sandbox Code Playgroud)

看起来这个假设是不会像第二个例子那样经历处理输入的麻烦,因此这会/不可能发生?

python subprocess

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

mac osx:如何cd到第一个字符是" - "的名字的文件夹?

有一个叫做"-Tmp-"的名字,我怎么能cd进去呢?

当我使用时cd,它提示为:

$ cd -Tmp-/
cd: -T: invalid options
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

macos cd

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

我的火车代码出了什么问题?

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

#define MINUTES_PER_HOUR 60

int main(void){

    double distance, vel1, vel2;
    double min_to_meet;
    int hr_to_meet;

    printf("enter the distance separating the trains?\n");
    scanf("%1f", &distance);

    printf("what is the speed of train 1?\n");
    scanf("%1f, &vel1");

    printf("what is the speed of train 2?\n");
    scanf("%1f, &vel2");

    hr_to_meet = distance/(vel1 + vel2);
    min_to_meet = hr_to_meet*MINUTES_PER_HOUR;

    printf("it will take %.31f minutes to meet.\n", min_to_meet);

    printf("the first train will travel %.21f miles.\n", vel1*hr_to_meet);
    printf("the second train will travel %.21f miles.\n", vel2*hr_to_meet);
    system("pause");
    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

我一直都是零,因为我的答案可以告诉我什么是错的?

c

-2
推荐指数
1
解决办法
95
查看次数

标签 统计

c ×2

c++ ×1

c++11 ×1

cd ×1

const ×1

gcc ×1

macos ×1

makefile ×1

memory ×1

python ×1

readonly ×1

reference ×1

subprocess ×1

vector ×1