小编mer*_*011的帖子

如何防止gcc优化器产生错误的位操作?

考虑以下程序.

#include <stdio.h>

int negative(int A) {
    return (A & 0x80000000) != 0;
}
int divide(int A, int B) {
    printf("A = %d\n", A);
    printf("negative(A) = %d\n", negative(A));
    if (negative(A)) {
        A = ~A + 1;
        printf("A = %d\n", A);
        printf("negative(A) = %d\n", negative(A));
    }
    if (A < B) return 0;
    return 1;
}
int main(){
    divide(-2147483648, -1);
}
Run Code Online (Sandbox Code Playgroud)

在没有编译器优化的情况下编译它时,它会产生预期的结果.

gcc  -Wall -Werror -g -o TestNegative TestNegative.c
./TestNegative
A = -2147483648
negative(A) = 1
A = -2147483648
negative(A) = 1 …
Run Code Online (Sandbox Code Playgroud)

c gcc compiler-optimization

28
推荐指数
4
解决办法
4151
查看次数

是否有可能在golang测试中将当前的包结构根作为字符串?

我正在为单元测试编写实用程序函数,单元测试在多个包中使用.此实用程序函数必须读取特定文件(始终是同一文件).这里有三个不起作用的解决方案,用于解释我在寻找什么以及为什么.

  1. 硬编码绝对路径.这会失败,因为尝试测试项目的另一个用户可能在绝对路径上有不同的前缀.

  2. 硬编码定义实用程序功能的文件路径的相对路径.这会失败,因为导入和使用此函数的包不一定与文件层次结构的级别与定义实用程序函数的文件相同,并且相对路径是相对于导入程序解释的,而不是导入的.

  3. 传入每个调用者相对于调用者包的文件的相对路径.这实际上有效,但似乎非常冗长,因为现在必须更改每个调用者以传递一个文件.

我看到第四个解决方案,我可以在实用程序函数中硬编码一个相对于顶级包的根目录的路径.但是,我还没有找到一种方法来获取代码中的根目录,虽然我怀疑有一个,因为可以从根解析导入.

那么,我怎么能得到抢手的根目录呢?

我查看了各种Go文档,但迄今为止未能找到解决方案.我也看到了这个问题,但解决方法相当于上面的#3.

go

25
推荐指数
5
解决办法
9234
查看次数

是否可以使用Visual Studio Debugger的Watch窗口观察内存位置的值?

是的,我知道有四个内存窗口,但我更喜欢在监视窗口中显示单个值,我想知道是否可以在监视窗口中指定要监视的内存位置.

将地址单独放置只是以十六进制计算到地址.

debugging visual-studio-2010 visual-studio visual-studio-debugging

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

为什么awk"not in"数组就像awk"in"数组一样工作?

这是一个awk脚本,它尝试根据第一列设置两个文件的差异:

BEGIN{
    OFS=FS="\t"
    file = ARGV[1]
    while (getline < file)
        Contained[$1] = $1
    delete ARGV[1]
    }
$1 not in Contained{
    print $0
}
Run Code Online (Sandbox Code Playgroud)

这是TestFileA:

cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

这是TestFileB:

ee
cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

但是,当我运行以下命令时:

gawk -f Diff.awk TestFileA TestFileB
Run Code Online (Sandbox Code Playgroud)

我得到的输出就像脚本包含"in"一样:

cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

虽然我不确定"不在"是否是我的意图的正确语法,但我很好奇为什么它的行为与我写"in"时的行为完全相同.

awk gawk

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

如何在保留ascii形式的ascii字符的同时使gdb以十六进制而不是八进制打印字符串的不可打印字符?

假设我有一个bufc字符串表示的缓冲区

 char* buf = "Hello World \x1c"
Run Code Online (Sandbox Code Playgroud)

当我使用命令在gdb中打印此buf时p buf,我得到以下内容

 $1 = "Hello World \034"
Run Code Online (Sandbox Code Playgroud)

是否有打印命令或gdb设置将打印以下内容?

$1 = "Hello World \x1c"
Run Code Online (Sandbox Code Playgroud)

我尝试过各种格式参数,例如/c/x,但是它们都没有得到我想要的效果.我也玩过printf但是无法达到预期的效果.

更新:我正在使用"GNU gdb(GDB)7.0.1-debian".

更新:我也玩过x.

如果我这样做x/c,打印非打印字符的八进制和十进制,然后打印带有ascii和十进制的可打印字符.

如果我这样做x/s输出与p命令完全相同.

如果我这样做x/x只输出十六进制但我们丢失了可打印部分的ascii字符.

更新:这个参考,除非不完整,表明我想要的东西不可用,但任何人都可以确认吗?

c string debugging assembly gdb

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

在hdfs中有相当于`pwd`的东西吗?

我试图这样做hdfs dfs -pwd,但该命令不存在.所以目前我诉诸干什么hdfs dfs -ls ..其次hdfs dfs -ls ../...

我也查看了命令列表,hdfs dfs但没有看到任何看起来很有希望的东西.

有没有更直接的方法来找到绝对路径?

hadoop hdfs

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

英特尔是什么意思"退休"?

在" 英特尔手册"中,提到了许多性能事件,这些事件的描述类似于"错误预测的分支指令已退役".retired在这种情况下究竟意味着什么?

请注意,我已经查看了英特尔的性能分析指南,其中指出"退役"具有非常精确的含义(第8页),参考第7页的图表,但我认为我缺乏背景知识来准确理解什么是意思是Retirement / Writeback.这个过程究竟是什么?它涉及什么?

performance x86 x86-64 intel

21
推荐指数
1
解决办法
6858
查看次数

是否有可能强制STL设置重新评估谓词?

请考虑以下数据结构和代码.

struct Sentence {
    std::string words;
    int frequency;
    Sentence(std::string words, int frequency) : words(words), frequency(frequency) {}
};
struct SentencePCompare {
    bool operator() (const Sentence* lhs, const Sentence* rhs) const {
        if (lhs->frequency != rhs->frequency) {
            return lhs->frequency > rhs->frequency;
        }
        return lhs->words.compare(rhs->words) < 0;
    }
};
std::set<Sentence*, SentencePCompare> sentencesByFrequency;

int main(){
    Sentence* foo = new Sentence("foo", 1);
    Sentence* bar = new Sentence("bar", 2);
    sentencesByFrequency.insert(foo);
    sentencesByFrequency.insert(bar);
    for (Sentence* sp : sentencesByFrequency) {
        std::cout << sp->words << std::endl;
    }
    foo->frequency = 5; …
Run Code Online (Sandbox Code Playgroud)

c++ stdset c++11

21
推荐指数
1
解决办法
1212
查看次数

是否可以在awk中将项附加到数组而不指定索引?

我意识到awk有关联数组,但我想知道是否有一个等同于此的awk:

http://php.net/manual/en/function.array-push.php

明显的解决方法是说:

array[$new_element] = $new_element
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不那么可读,而且比它需要的更加黑客.

awk gawk

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

如何在matlab中将单元格转换为字符串

假设我有一个细胞

v =    'v'    [576.5818]    [3.0286]    [576.9270]

       'v'    [576.5953]    [3.1180]    [576.8716]

       'f'    [      56]    [    58]    [      52]

       'f'    [      56]    [    58]    [      52]
Run Code Online (Sandbox Code Playgroud)

我想使用每个元素的格式字符串将其转换为单元格数组:' %.5f'

我怎样才能做到这一点?我尝试了以下方法,但是我收到了一个错误:

f1 = @(x) sprintf('   %.5f',x);
cellfun(f1, num2cell(v),'UniformOutput', false) 
Run Code Online (Sandbox Code Playgroud)

我收到一个错误???

Error using ==> sprintf

Function is not defined for 'cell' inputs.

Error in ==> @(x)sprintf(' %.5f',x)

任何人都可以提前帮助我

string matlab cell

18
推荐指数
3
解决办法
8万
查看次数