小编EMi*_*ler的帖子

将一个分支合并到另一个分支的Git是双向合并吗?

我的git repo看起来像这样:

         _ branch_a
        /
master /
        \_ branch_b
Run Code Online (Sandbox Code Playgroud)

现在我想将branch_b合并到branch_a中,而不是将其分支到master中.

所以我做了

git checkout branch_a
git merge branch_b
Run Code Online (Sandbox Code Playgroud)

git去了,发现了几个冲突.

当我git mergetool使用meld我在控制台上获得的东西时

 {local}: modified file
 {remote}: modified file
Run Code Online (Sandbox Code Playgroud)

和一个只显示LOCAL和REMOTE的窗口.

我想知道的是:

  1. 为什么不显示master中的内容的共享基础?

  2. 在LOCAL和REMOTE之间,我应该编辑哪一个?

git merge meld git-merge

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

我如何可视化Fortran(90或更高版本)源代码,例如使用Graphviz?

我被扔进了一个包含大量源文件的大型Fortran项目中.

我需要为这个项目做出贡献,我首先理解来源似乎是谨慎的.

作为第一步,我想想象各种源文件之间的相互依赖性,即哪些源文件需要哪些模块.据我所知,其他语言存在自动化方法,并产生可以使用Graphviz构建的图形.

但有没有人知道那些可以为Fortran 90代码执行此操作的软件?

[搜索Fortran帮助的互联网是一个真正的痛苦,因为你最终搜索了蜘蛛网,这要归功于痛苦无处不在的FORTRAN 77.

visualization fortran graph graphviz

15
推荐指数
2
解决办法
9613
查看次数

发送到包含子节点的perl脚本时,SIGINT(^ C)会发生什么?

我有一个分叉的Perl脚本.

每个fork运行一个外部程序,解析输出,并将输出转换为Storable文件.

然后由父母读入可存储文件,并且在继续重复前一个分支之前分析来自每个孩子的总数据,否则父母停止.

当一些孩子仍在运行外部程序时发出^ C时到底发生了什么?在前台调用父perl脚本,我认为,尽管有分叉,仍保留在前台.

是否将SIGINT传递给所有子节点,即父节点,父节点的子节点以及子节点调用的外部程序?

更新:

我应该补充一点,看来当我发出SIGINIT时,我脚本的子节点调用的外部程序似乎会确认信号并终止.但孩子们,或者父母的计划,继续下去.这一点对我来说都不清楚.

更新2:

关于tchrist的评论,外部程序是用Perl的system()命令调用的.

事实上,tchrist的评论似乎也包含了我正在寻找的解释.经过一些调试后,根据我的程序的行为,看来确实,SIGINT正从父级传递给所有子级,并且从所有子级传递给所有子级(外部程序).

因此,根据tchrist的评论,似乎正在发生的事情是CTRL-C正在杀死外部程序,导致孩子们离开system()命令 - 仅此而已.

虽然我让我的孩子检查了所调用内容的退出状态system(),但我假设CTRL-C会从父节点中删除所有内容,而不是导致创建更多轮处理,这就是发生的事情! !

解决方案(对我的问题):

我需要在父级中为SIGINT创建一个信号处理程序.然后信号处理程序将SIGTERM发送给每个子节点(我假设它也会向子节点的子节点发送SIGTERM),然后使父节点正常退出.虽然这个有点明显的解决方案可能会解决问题,但我想理解我对于在Perl中分叉的SIGINT行为的误解.

perl fork parent-child sigint

14
推荐指数
2
解决办法
5962
查看次数

未初始化的价值是否会带来安全风险?

在学习C的过程中,我犯了一些错误并打印出未初始化的字符数组元素.

如果我将数组的大小扩展为相当大,比如说大小为100万个元素然后打印内容,那么出来的并不总是用户不可读,但似乎包含一些运行时信息.

请考虑以下代码:

#include <stdio.h>
main() {

        char s[1000000];
        int c, i;

        printf("Enter input string:\n");
        for (i = 0; ( c = getchar()) != '\n'; i++) {
                s[i] = c;
        }   

        printf("Contents of input string:\n");
        for (i = 0; i < 999999; i++) {
                putchar(s[i]);
        }   
        printf("\n");

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

只需滚动输出,我会发现如下内容:

?? ?L' ?????? _ dyldVersionNumber_dyldVersionString_dyld_all_image_infos_dyld_fatal_error_dyld_shared_cache_ranges_error_string__mh_dylinker_header_stub_binding_helper_dyld_func_lookup_offset_to_dyld_all_image_infos__dyld_start__ZN13dyldbootstrapL30randomizeExecutableLoadAddressEPK12macho_headerPPKcPm__ZN13dyldbootstrap5startEPK12macho_headeriPPKcl__ZN4dyldL17setNewProgramVarsERK11ProgramVars__ZN4dyld17getExecutablePathEv__ZN4dyld22mainExecutablePreboundEv__ZN4dyld14mainExecutableEv__ZN4dyld21findImageByMachHeaderEPK11mach_header__ZN4dyld26findImageContainingAddressEPKv

并且,

Apple Inc.1&0 $ U?0?*?H ?? CA0?"0ple Certification Authority10U?GP ?? GP ?? ^ y? - ?6?WLU ???? Kl ??"0?>?P? A ??????????????????????????????????????????????????????????????????????????????????? ?ˬ,运算δλ0 24 C'= …

c security

12
推荐指数
2
解决办法
1732
查看次数

从Perl收获子进程

我有一个产生一组孩子的脚本.家长必须等待每个孩子完成.

我的脚本执行类似于以下perl脚本:

#! /usr/bin/perl
use strict;
use warnings;

print "I am the only process.\n";

my @children_pids;

for my $count (1..10){
        my $child_pid = fork();
        if ($child_pid) {  # If I have a child PID, then I must be the parent
                push @children_pids, $child_pid;
        }
        else { # I am the child
                my $wait_time = int(rand(30));
                sleep $wait_time;
                my $localtime = localtime;
                print "Child: Some child exited at $localtime\n";
                exit 0; # Exit the child
        }
}

foreach my $child (@children_pids) …
Run Code Online (Sandbox Code Playgroud)

perl fork parent-child waitpid

10
推荐指数
3
解决办法
8426
查看次数

Fortran控制字符(托架控制)是否仍在编译器中实现?

在" 科学家和工程师的Fortran 95/2003 "一书中,有很多关于认识到格式语句中的第一列是为控制字符保留的重要性.我还看到互联网上的控制字符被称为运输控制.

为了避免混淆,通过控制字符,我将字符"1,空白(即\ s),0和+"称为当放置在第一列(字符)中时对输出的垂直间距产生影响格式声明.

另外,请参阅这个完全以固定宽度字体编写的纯文本网页:Fortran支架控制(因为没有什么比等宽字体中的散文更能说明准确性和古老性).我发现这个页面和其他类似的页面并不十分清楚.

的Fortran 95/2003科学家和工程师,失败回顾,第一列被保留以供滑架控制可导致可怕意想不到的输出.解读Dave Barry,输入错误的字符,核导弹向挪威开火.

然而,当我试图坚持这个严厉的警告时,我发现gfortran不知道我在说什么.

请允许我用一些示例代码说明我的观点.我正在尝试打印数字Pi:

PROGRAM test_format
IMPLICIT NONE

REAL :: PI = 2 * ACOS(0.0)

WRITE (*, 100) PI
WRITE (*, 200) PI
WRITE (*, 300) PI
100 FORMAT ('1', "New page: ", F11.9)
200 FORMAT (' ', "Single Space: ", F11.9)
300 FORMAT ('0', "Double Space: ", F11.9)
END PROGRAM test_format
Run Code Online (Sandbox Code Playgroud)

这是输出:

1New page: 3.141592741
Single Space: 3.141592741
0Double Space: 3.141592741 …
Run Code Online (Sandbox Code Playgroud)

compiler-construction fortran control-characters gfortran

9
推荐指数
1
解决办法
5462
查看次数

Fortran是否通过函数和子例程调用保留内部变量的值?

经过多次痛苦的调试后,我相信我已经找到了Fortran的一个独特属性,我想在stackoverflow验证这里.

我一直注意到的是,至少,内部逻辑变量的值在函数或子程序调用中保留.

这是一些示例代码来说明我的观点:

PROGRAM function_variable_preserve
IMPLICIT NONE

CHARACTER(len=8) :: func_negative_or_not ! Declares function name
INTEGER :: input
CHARACTER(len=8) :: output

input = -9

output = func_negative_or_not(input)
WRITE(*,10) input, " is ", output
10 FORMAT("FUNCTION: ", I2, 2A)

CALL sub_negative_or_not(input, output)
WRITE(*,20) input, " is ", output
20 FORMAT("SUBROUTINE: ", I2, 2A)

WRITE(*,*) 'Expected negative.'


input = 7
output = func_negative_or_not(output)
WRITE(*,10) input, " is ", output

CALL sub_negative_or_not(input, output)
WRITE(*,20) input, " is ", output

WRITE(*,*) 'Expected positive.'

END PROGRAM …
Run Code Online (Sandbox Code Playgroud)

fortran scope function subroutine

9
推荐指数
1
解决办法
6666
查看次数

Fortran如何解除链接列表?

我想在Fortran中使用链表来保存未定义长度的数据数组.

我有以下设置:

TYPE linked_list
    INTEGER :: data
    TYPE(linked_list) :: next_item => NULL()
END TYPE
Run Code Online (Sandbox Code Playgroud)

现在说我创建了这样一个列表:

TYPE(LINKED_LIST) :: example_list
example_list%data =1
ALLOCATE(example_list%next_item)
example_list%next_item%data = 2
ALLOCATE(example_list%next_item%next_item)
example_list%next_item%next_item%data = 3
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我执行:

DEALLOCATE(example_list)
Run Code Online (Sandbox Code Playgroud)

所有嵌套的级别也会被释放,或者我是否需要遍历列表到最深的元素并从最深的元素向上释放?

fortran pointers memory-management linked-list

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

如何确保我的Fortran FORALL构造被并行化?

我已经获得了一个2D矩阵,表示金属板表面的温度点.基质(板)的边缘保持恒定在20摄氏度,并且在一个预定点处存在100摄氏度的恒定热源.所有其他网格点最初设置为50摄氏度.

我的目标是通过对周围的四个网格点(i + 1,i-1,j + 1,j-1)进行迭代平均来获取所有内部网格点并计算其稳态温度,直到达到收敛(迭代之间小于0.02摄氏度).

据我所知,迭代网格点的顺序是无关紧要的.

对我来说,这听起来像是调用Fortran FORALL构造并探索并行化乐趣的好时机.

如何确保代码确实是并行化的?

例如,我可以在我的单核PowerBook G4上编译它,并且由于并行化,我预计速度不会提高.但如果我在双核AMD Opteron上编译,我会假设FORALL结构可以被利用.

或者,有没有办法衡量程序的有效并行化?

更新

回答MSB的问题,这是与gfortran版本4.4.0.gfortran是否支持自动多线程?

值得注意的是,FORALL结构已被淘汰,我想,那就是自动向量化.

也许这对于一个单独的问题是最好的,但自动矢量化是如何工作的?编译器是否能够检测到循环中只使用纯函数或子例程?

parallel-processing fortran forall

6
推荐指数
2
解决办法
3707
查看次数

为什么在声明std :: set时需要重复排序子程序?

在我的C++程序中,我试图按值而不是按键对我的地图进行排序.

这个问题来看,似乎很清楚,这样做的方法是创建一个集合,其元素是成对的,并且由我自己的less-than函数排序.

这是一些示例代码,我尝试这样做:

#include <map>
#include <set>
#include <iostream>
#include <string>

using namespace std;

bool compareCounts(const pair<string, size_t> &lhs, const pair<string, size_t> &rhs);

int main (int argc, char *argv[]) {
        map <string, size_t> counter = { {"A", 1}, {"B", 2}, {"C", 3} };
        set <pair<string, size_t>, decltype(compareCounts) *> sorted_counter;
        for (map<string, size_t>::iterator it = counter.begin(); it != counter.end(); ++it) {
                cout << "About to add: " << it->first << ":" << it->second << endl;
                auto ret = sorted_counter.insert(*it); …
Run Code Online (Sandbox Code Playgroud)

c++ dictionary stl set c++11

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