在学习 The Unix Programming Environment (1983) 一书中的一些例子时,我读了一些对我来说很奇怪的 C 代码。
出于好奇,我想了解更多关于“风格”的信息,我们称之为“风格”。这里的兴趣点是下面的线int main(argc, argv)
#include <stdio.h>
int main(argc, argv)
char *argv[];
{
printf("%s\n", argv[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的调查中,我发现使用标志编译上面的代码可以在-Wall -pedantic -ansi没有任何警告的情况下工作,并且替换-ansi为更新的-std=c99(或c11, withgcc和cc)只会警告argc默认为int.
我仔细阅读了旧的 C89 标准,试图找到对这种特殊写作方式的引用,但我自己没有找到任何东西,所以我遵循集体的更多知识。
因此,问题是,这种深奥的写作从什么时候开始,可能为什么仍然允许(遗留原因?)
ts-guide说:
除了
:形式之外,几乎所有球拍的绑定形式都有允许指定类型的对应形式。
但它没有说明何时使用哪一个。
并且ts-reference说form:是遗留的,为了向后兼容。
但是在ts-guide中,form:很多地方都用到了。
所以: v t比form:? 那么form呢?
例如:
; form:
(define: (id [z : Number]) : Number z)
; : v t + form
(: id (-> Number Number))
(define (id z) z)
; form (it seems recent versions of Racket add this?)
(define (id [z : Number]) : Number z)
Run Code Online (Sandbox Code Playgroud) 尝试将一些基本单元测试添加到大量现有(Fortran 90)代码中,这是一种明智的方法,即仅在锁定系统上开发人员,没有机会安装任何第三方框架。我只能使用标准的 Linux 工具。目前,代码库是使用非常有限的一组测试在完整系统级别进行测试的,但这非常耗时(运行多天),因此在开发过程中很少使用
理想情况下,希望能够逐步向关键系统添加有针对性的测试,而不是在一次尝试中彻底检修整个代码库。
采用下面的示例模块,并假设断言类型宏的实现,如Fortran 中的 Assert中详细说明
MODULE foo
CONTAINS
FUNCTION bar() RESULT (some_output)
INTEGER :: some_output
some_output = 0
END FUNCTION bar
END MODULE foo
Run Code Online (Sandbox Code Playgroud)
我想到了几种可能的方法,但实施这些方法可能会遇到我不知道的技术或管理挑战:
每个模块都有单独的测试模块,如下所示,并有一个主测试运行程序来调用每个模块内的每个函数
MODULE foo_test
CONTAINS
SUBROUTINE bar_test()
! ....
END SUBROUTINE bar_test()
END MODULE foo_test
Run Code Online (Sandbox Code Playgroud)与上面类似的方法,但每个测试都有单独的可执行文件。明显的好处是,单个故障不会终止所有测试,但可能更难管理大量测试可执行文件,并且可能需要大量额外代码。
使用预处理器包含每个模块中包含测试的主函数,例如在带有 C/C++ 风格宏的 gfortran Fortran 90 中(例如 #define SUBNAME(x) s ## x),并使用构建脚本自动测试 main 的存储主代码文件中的预处理器分隔符之间。
我尝试过使用一些现有的 Fortran 框架(如 >为什么 Fortran 中的单元测试框架依赖 Ruby 而不是 Fortran 本身? > 中所述),但对于这个特定的项目,不可能安装其他工具我正在使用的系统。
我有一个第三方遗留应用程序,需要VB6 Active X EXE库接口.我希望将VB6 Active X EXE库更新为当前支持的语言.由于旧版主机应用程序来自第三方,因此我无法更改主机API以使用ActiveX EXE以外的接口.是否有任何当前支持的Microsoft语言,即x86 C++,C++/CLI,C#或VB.NET,可以创建相当于ActiveX EXE接口?
我怀疑答案是肯定的,但我正在寻找一个明确的答案.必须修改使用ActiveX EXE库的任何旧主机应用程序,以允许使用受支持的语言和工具.基本上确认有效的ActiveX EXE现在是一个不受支持的API接口.
我已经看过这个类似的问题,从中我可以推断出答案是否定的,但没有明确的答案.我也看过这个微软教程,从我可以告诉它谈到更新主机应用程序,在这种情况下不是一个选项.本教程讨论切换到ActiveX DLL,但我的理解是这需要更改第三方主机应用程序.在我的情况下,这不是一个选项.我需要一些看起来像主机的ActiveX EXE库的东西.
我的客户有一个旧的不存在的应用程序; 他与提出申请的公司有问题,他们不会透露他的数据库密码.他意识到他签了一份合同(当时),他说他有点"租用"申请,他们无权透露任何内容.该客户发现他不是唯一一个与该公司有同样问题的人.他是一名牙医,其他同样旧应用的牙医在尝试购买新软件并尝试将患者迁移到新系统时遇到了同样的问题.
在任何一种情况下,他都想打开他的小火鸟数据库,所以我们至少可以将一些数据提取到我们的SQL Server中.我尝试使用默认的'masterkey'(事实上,由于8 char限制,'masterke')无济于事.
现在我知道他可以合法并试图强迫公司发布他的信息,但我想在短期内做到这一点.有没有人知道一个可以暴力/破解传统Firebird密码的应用程序?
谢谢.
编辑:遗留软件是"STOMA-W",我甚至无法在互联网上找到它.它们位于西班牙阿斯图里亚斯.
在C#我继承的项目上清理了一些警告,我找到了这段代码:
private bool _WriteValue(object FieldValue,..,..)
...
if(MultipFactor!=1)
FieldValue=((double)FieldValue)*MultipFactor;
else
FieldValue=FieldValue;
Run Code Online (Sandbox Code Playgroud)
我显然else没有想太多就烧掉了块,只是想知道为什么以前的程序员已经离开了这一部分.
在您看来,是否有任何有效的情况foo=foo有意义?
有关该_WriteValue方法的更多详细信息:
该_WriteValue方法被包裹成不同的重载WriteValue其传递给方法object FieldValue的参数,以下类型的值:int,long,string和Datetime.
我试图通过使用gfortran从源代码构建它来获得遗留的FORTRAN代码.我终于能够成功构建它,但现在我运行时遇到了越界错误.我使用gdb并将错误跟踪到使用loc()内在函数的函数.当我尝试打印值时loc(ae),使用ae作为我的整数值,我得到错误"No symbol"loc"in current context".我尝试使用ifort 11.x进行编译并使用DDT进行调试并得到相同的错误.对我来说,这意味着编译器对内在函数一无所知.
一点点阅读显示,内在内在不是F77标准的一部分,所以也许这是问题的一部分.我在下面发布了内在的定义,但我不知道如何在我的代码中实现它,因此可以使用loc().
有什么建议或我误解了我的问题?因为gfortran和ifort由于越界错误而在同一个地方崩溃,但是使用loc()的函数在两个编译器之间返回相同的大数.如果两个编译器都为loc返回相同的值,则loc()将无法工作似乎有点奇怪.
用法:
iaddr = loc(obj)
哪里:
obj是一个变量,数组,函数或子程序,其地址是通缉的.iaddr是一个地址为"obj"的整数.地址格式与LARn指令存储的格式相同.
描述:
LOC用于获取某些东西的地址.返回的值在Fortran中并不真正有用,但可能需要GMAP子例程或非常特殊的调试.
我有一个遗留的应用程序,我想转移到Symfony2.这个应用程序不是在MVC中构建的,它没有PSR-0兼容性,它是一个非常遗留的应用程序,'/ search.php'指向文件'search.php',菜单,页眉和页脚包括不同的文件共享.
如果我能够以某种方式将这个应用程序快速插入到Symfony2中,然后开始将它们一次一个地移动到Symfony2应用程序架构中,这将是理想的.我真的不想做一些瀑布尝试将整个事情移植过来,然后在3-6个月内做一些大规模的更新.任何人都可以推荐一种方法来执行本机PHP脚本,其中包括Symfony2控制器中的mysql查询或其他一些最好的方法吗?我目前正在考虑可能包括php或twig模板中的文件.谢谢!
我试图通过Angular服务将遗留的javascript函数中的消息广播到Angular控制器中.在Angular中调用时,广播工作正常,但不在外部.见http://jsfiddle.net/yh3Ds/24/
我正在处理遗留项目,试图改进项目结构。我的问题是我应该如何组织代码结构。我看到两个选择:
#1 业务域/层
app/
----accout/
--------application/
--------domain/
--------infrastructure/
----client/
--------application/
--------domain/
--------infrastructure/
----transfer/
--------application/
--------domain/
--------infrastructure/
Run Code Online (Sandbox Code Playgroud)
或#2层/业务域
app/
----application/
--------account/
--------client/
--------transfer/
----domain/
--------account/
--------client/
--------transfer/
----infrastructure/
--------account/
--------client/
--------transfer/
Run Code Online (Sandbox Code Playgroud)
哪种方法更适合遗留项目?根据您的经验,哪个更可取?
从我的角度来看,#1 将在进一步重构期间实现系统解耦。另一方面,对于遗留项目来说,#1 似乎更容易实现。
architecture legacy domain-driven-design directory-structure
legacy ×10
fortran ×2
activex-exe ×1
angularjs ×1
annotations ×1
architecture ×1
broadcast ×1
brute-force ×1
c ×1
c# ×1
coding-style ×1
factory ×1
firebird ×1
gfortran ×1
interbase ×1
intrinsics ×1
javascript ×1
linux ×1
parameters ×1
php ×1
racket ×1
refactoring ×1
symfony ×1
testing ×1
typed-racket ×1
unit-testing ×1
vb.net ×1
vb6 ×1