我知道 \xe2\x80\x9c函数声明符中的空列表不是该函数定义的一部分,指定不提供有关参数数量或类型的信息\xe2\x80\x9e [1]:
\n// No information about the parameters is supplied.\nint foo();\nRun Code Online (Sandbox Code Playgroud)\n我知道 \xe2\x80\x9c函数声明符中的空列表是该函数定义的一部分,指定该函数没有参数\xe2\x80\x9e [2]。
\n// In this case the foo() function has no parameters.\nint foo()\n{\n // ...\n}\nRun Code Online (Sandbox Code Playgroud)\n我知道 \xe2\x80\x9c类型的未命名参数的特殊情况void作为列表中唯一的项目指定该函数没有参数\xe2\x80\x9e [3]:
// foo() has no parameters.\nint foo(void);\n\n// bar() has no parameters.\nint bar(void)\n{\n // ...\n};\nRun Code Online (Sandbox Code Playgroud)\n所以这里有一些问题:
\n合法吗int main() { /* ... …
#include <stdio.h>
int main(void)
{
int a, b;
int *p = &a;
#ifdef __clang__
int *q = &b + 1;
#elif __GNUC__
int *q = &b - 1;
#endif
printf("%p %p %d\n", (void *)p, (void *)q, p == q);
}
Run Code Online (Sandbox Code Playgroud)
C11 § 6.5.9 \ 6 说
两个指针比较相等当且仅当它们都是空指针,都是指向同一个对象的指针(包括指向一个对象的指针和它开头的子对象)或函数,都是指向同一数组最后一个元素之后的指针对象,或者一个是指向一个数组对象末尾的指针,另一个是指向另一个数组对象开头的指针,该对象恰好紧跟地址空间中的第一个数组对象。
我已经通过四种不同的方式对其进行了测试:
-01选项;-01选项;结果如下:
$ ./prog_clang
0x7ffebf0a65d4 0x7ffebf0a65d4 1
$ ./prog_clang_01
0x7ffd9931b9bc 0x7ffd9931b9bc 1
$ ./prog_gcc
0x7ffea055a980 0x7ffea055a980 1 …Run Code Online (Sandbox Code Playgroud) 我有一个采用 Cortex A9 ARMv7 架构的 SoC。我需要能够在带有此 SoC 的板上运行 python 脚本。所以我需要针对这个平台交叉编译Python。
SoC具有ARMv7架构,因此我安装了arm-linux-gnueabihf在VirtualBox中运行的Ubuntu 20.04的交叉编译器。
我正在遵循这个指示:
首先,我下载了Python 2.7.1源代码并将其解压到/home/user/python/Python-2.7.1目录中。
然后我按照说明下载了补丁。
然后我应用了补丁:
patch -p1 < python-2.7.1-cross-compile.patch
Run Code Online (Sandbox Code Playgroud)
然后我为host编译了一些工具:
./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
make distclean
Run Code Online (Sandbox Code Playgroud)
然后我配置了 Python 进行交叉编译:
readonly CROSS_COMPILER=arm-linux-gnueabihf
CC=${CROSS_COMPILER}-gcc \
CXX=${CROSS_COMPILER}-g++ \
AR=${CROSS_COMPILER}-ar \
RANLIB=${CROSS_COMPILER}-ranlib \
./configure \
--host=${CROSS_COMPILER} \
--target=${CROSS_COMPILER} \
--prefix=/python
Run Code Online (Sandbox Code Playgroud)
然后我最后交叉编译它:
make \
HOSTPYTHON=./hostpython \
HOSTPGEN=./Parser/hostpgen \
BLDSHARED="${CROSS_COMPILER}-gcc -shared" \
CROSS_COMPILE=${CROSS_COMPILER}- \
CROSS_COMPILE_TARGET=yes
Run Code Online (Sandbox Code Playgroud)
但最终我得到了IndentationError:
/usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/bin/ld: …Run Code Online (Sandbox Code Playgroud)我有以下代码:
#include <iostream>
#include <chrono>
#define ITERATIONS "10000"
int main()
{
/*
======================================
The first case: the MOV is outside the loop.
======================================
*/
auto t1 = std::chrono::high_resolution_clock::now();
asm("mov $100, %eax\n"
"mov $200, %ebx\n"
"mov $" ITERATIONS ", %ecx\n"
"lp_test_time1:\n"
" add %eax, %ebx\n" // 1
" add %eax, %ebx\n" // 2
" add %eax, %ebx\n" // 3
" add %eax, %ebx\n" // 4
" add %eax, %ebx\n" // 5
"loop lp_test_time1\n");
auto t2 = std::chrono::high_resolution_clock::now();
auto time = std::chrono::duration_cast<std::chrono::nanoseconds>(t2 …Run Code Online (Sandbox Code Playgroud)