我最近发现,当__FILE__在 MSVC(特别是 2013)中使用预定义宏时,默认情况下它将打印源文件的相对路径和头文件的绝对路径。
作为示例,我有一个 VS 项目,其中包含以下内容:
Solution
Project
Headers
foo.h
Sources
main.cpp
Run Code Online (Sandbox Code Playgroud)
main.cpp 和 foo.h 都位于磁盘上的同一目录中。
主要.cpp:
#include <iostream>
#include <string>
#include "foo.h"
int main(int, char*[])
{
std::cout << __FILE__ << std::endl;
foo::bar();
std::cout << "Press enter to exit";
std::string str;
std::getline(std::cin, str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
foo.h:
#ifndef FOO_H
#define FOO_H
#include <iosfwd>
class foo
{
public:
static void bar()
{
std::cout << __FILE__ << std::endl;
}
};
#endif
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时(在发布模式下,使用默认设置 - 编译并未/Zi定义/FC),则输出为:
main.cpp
c:\users\<user>\documents\dev\solution\project\foo.h …Run Code Online (Sandbox Code Playgroud) QNX(Neutrino 6.5.0)使用ksh的开源实现作为其shell.许多提供的脚本(包括系统启动脚本)都使用诸如的结构
if ! test /dev/slog -ef /dev/slog; then
# do something
fi
Run Code Online (Sandbox Code Playgroud)
检查文件系统中是否存在资源管理器.我搜索过,只能找到非常严厉的解释,-ef检查两个参数是否实际上是同一个文件.由于指定的文件名是相同的,它似乎只是减少到检查文件是否存在.
我检查过的行为test -a和test -e(似乎根据我读过的各种文档检查任何类型文件的文件存在),它们似乎也有效.
在-ef和-a/ 之间执行的检查是否有任何区别-e?是否使用-ef某种尝试来防止文件存在时的竞争条件?
以下代码调用析构函数4次:
#include<iostream>
using namespace std;
class A{
public:
A(){cout<<"A"<<endl;}
~A(){cout<<"~A"<<endl;}
A f(){cout<<"F"<<endl; A b; return b;}
};
int main(){
A a,b;
b=a.f();
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
A
A
F
A
~A
~A
~A
~A
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?我原以为应该只有三个析构函数调用.
所以我测试了一个利用实验性嵌入代码功能的正则表达式。我的测试成功了,所以我详细说明了它来做一个更复杂的脚本,但遇到了错误。我将错误追溯到在正则表达式中而不是在嵌入代码中的变量的简单使用。我尝试在建议的 eval 中执行正则表达式,但发现这不起作用,因为在 eval 的正则表达式之后我无法访问特殊变量。我最终重新编写了代码以不使用嵌入式代码策略,但我很好奇为什么它不起作用。我在下面的一对 perl one-liners 中简化了问题:
这有效:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
while (/(.{10,41})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig {
print("$1\n")
}
sub r { return(join("",reverse(split("",$_[0])))) }'
Run Code Online (Sandbox Code Playgroud)
那为什么不呢?:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
$f=10;
$e=41;
while (/(.{$f,$e})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig) {
print("$1\n")
}
sub r { …Run Code Online (Sandbox Code Playgroud) 什么.NET功能将允许我加载"重新加载"和"重启"嵌入式服务器?我不知道如何好好问这个问题.我正在编写一个需要定期更新其他功能的服务器.我希望它在不同的端口上运行2个相同的服务器(用于冗余)然后当我推出新的更改时,请关闭其中一个服务器,加载新代码,运行测试,开始将流量移动到新版本,然后开始第二台服务器上的相同进程.
我想也许AppDomains或MEF可能正是我正在寻找的,但对这些技术知之甚少.我想知道.NET框架中是否还有其他东西,我错过了会有所帮助.
有什么建议?如果我关闭AppDomains或MEF,请随时告诉我.
c++ ×2
.net ×1
c# ×1
eval ×1
javascript ×1
ksh ×1
nrvo ×1
perl ×1
qnx ×1
regex ×1
reload ×1
rvo ×1
visual-c++ ×1
youtube ×1
youtube-api ×1