例如
啊
class Dummy {
public:
Dummy() { std::cout << "a.h" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)
BH
class Dummy {
public:
Dummy() { std::cout << "b.h" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)
c.cc
#include "a.h"
void test() {
Dummy a;
}
Run Code Online (Sandbox Code Playgroud)
d.cc
#include "b.h"
int main() {
Dummy a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后使用命令编译源文件
g++ d.cc c.cc
Run Code Online (Sandbox Code Playgroud)
输出是
b.h
Run Code Online (Sandbox Code Playgroud)
但是有了命令
g++ c.cc d.cc
Run Code Online (Sandbox Code Playgroud)
输出是
a.h
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么没有multiple definition错误以及为什么输出取决于编译的顺序?
unsigned int lo = 0;
unsigned int hi = 0;
__asm__ __volatile__ (
"mfence;rdtsc" : "=a"(lo), "=d"(hi) : : "memory"
);
Run Code Online (Sandbox Code Playgroud)
mfence 在上面的代码中,是否有必要?
根据我的测试,找不到cpu重新排序.
测试代码片段包含在下面.
inline uint64_t clock_cycles() {
unsigned int lo = 0;
unsigned int hi = 0;
__asm__ __volatile__ (
"rdtsc" : "=a"(lo), "=d"(hi)
);
return ((uint64_t)hi << 32) | lo;
}
unsigned t1 = clock_cycles();
unsigned t2 = clock_cycles();
assert(t2 > t1);
Run Code Online (Sandbox Code Playgroud) 我有这样的shell脚本,
#!/bin/bash
foxy1="foxyserver"
H="1"
Run Code Online (Sandbox Code Playgroud)
输出应该是foxyserver.
我试过这个,
echo $foxy$H
Run Code Online (Sandbox Code Playgroud)
这给了我
1
Run Code Online (Sandbox Code Playgroud)
然后我用了
str="foxy$H"
echo $str
Run Code Online (Sandbox Code Playgroud)
输出是
foxy1
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?