对于C的力量?

所以在python中,我所要做的就是 print(3**4) 这让我81 我怎么用C做这个? 我搜索了一下并说了exp()函数,但不知道如何使用它,提前谢谢

整数溢出和未定义的行为

由于可能存在undefined behavior因此在实际加/减之前检测整数溢出有很多问题。 所以,我的问题是 为什么它会首先产生这种undefined behavior ? 我可以想到两个原因: 1)在这种情况下生成exception的处理器。 当然,它可以切换,很可能是一个写得很好的CRT会做到这一点。 2)使用数字的其他二进制表示的处理器(1的补码?基数10?)。 在这种情况下,未定义的行为将表现为不同的结果(但不会崩溃!)。 好吧,我们可以忍受。 那么,为什么有人会避免造成它呢? 我错过了什么吗?

为什么一个大的本地数组会崩溃我的程序,但是全局程序不会崩溃?

具有大型全局数组的程序: int ar[2000000]; int main() { } 使用大型本地数组的程序: int main() { int ar[2000000]; } 当我在main函数中声明一个大尺寸的数组时,程序会崩溃并出现“SIGSEGV(Segmentation fault)”。 但是,当我将其声明为全局时,一切正常。 这是为什么?

C scanf(“%c”)的问题是逐个读取字符的function

以下代码在运行时会产生一个非常奇怪的结果。 #include #include int main(void) { for ( ; ; ) { char test; printf(“Please enter ‘w’ “); scanf(“%c”, &test); printf(“%c\n”, test); if (test == ‘w’) { printf(“Working\n”); } else { printf(“ERROR\n”); return 0; } } } 我想要发生的是每当我输入’w’时它继续循环,所以我可以再次输入’w’。 虽然我输入’w’,它的作用是转到else语句。 它似乎跳过了scanf()行。 我问过我认识的每个人谁知道C,但他们不知道如何解决它。 有人请帮帮我!

类似的String算法

我正在寻找一种算法,或者至少是关于如何在两个或多个不同的字符串中找到类似文本的操作理论…… 就像这里提出的问题一样: 查找具有相似文本的文章的算法 ,区别在于我的文本字符串只会是少数单词。 就像说我有一个字符串:“进入清澈的蓝天”,我正在与以下两个字符串进行比较:“颜色是azure色”和“在蓝色晴朗的天空” 我正在寻找一种可用于匹配两者中文本的算法,并决定它们的匹配程度。 在我的情况下,拼写和标点符号将是重要的。 我不希望它们影响发现真实文本的能力。 在上面的例子中,如果颜色参考存储为“’azure色’”,我希望它仍然能够匹配。 但是,列出的第3个字符串应该比第二个字符串更好,等等。 我敢肯定谷歌这样的地方可能会使用类似于“你是不是的意思:”的function…… *编辑* 在与朋友交谈时,他与一位撰写有关该主题的论文的人一起工作。 我想我可能会与阅读此内容的所有人分享,因为其中描述了一些非常好的方法和流程…… 这是他的论文的链接 ,我希望它对那些阅读这个问题的人以及类似字符串算法的主题有所帮助。

为什么我被允许在C中使用const限定变量作为数组大小?

当我运行以下代码时,它适用于C: #include int main(void) { const int x=5; char arr[x]; printf(“%d”,sizeof(arr)); } 但是我不仅在之前读过const限定变量不是real常量(这就是为什么它们不能在switch-case ),但IBM的以下链接证实了( IBMLINK )并说: const int k = 10; int ary[k]; /* allowed in C++, not legal in C */ 为什么我允许在C中使用const限定变量作为数组大小而没有任何错误?

使用背靠背rdtsc进行负时钟周期测量?

我正在编写一个C代码,用于测量获取信号量所需的时钟周期数。 我正在使用rdtsc,在对信号量进行测量之前,我连续两次调用rdtsc来测量开销。 我在for循环中重复了这么多次,然后我使用平均值作为rdtsc开销。 这是正确的,首先要使用平均值吗? 尽管如此,这里的一个大问题是,有时我会得到开销的负值(不一定是平均值,但至少是for循环中的部分值)。 这也会影响sem_wait()操作所需的cpu周期数的连续计算,有时也会产生负数。 如果我写的不清楚,这里有一部分我正在编写的代码。 为什么我会得到这样的负值? (编者注:请参阅获取CPU周期计数?以获得完整的64位时间戳的正确和可移植方式。 “=A” asm约束仅在编译为x86-64时获得低或高32位,具体取决于寄存器分配是否恰好为uint64_t输出选择RAX或RDX。它不会选择edx:eax 。) (编辑的第二个注释:哎呀,这就是为什么我们得到负面结果的答案。仍然值得留下一个注释,作为警告不要复制这个rdtsc实现。) #include #include #include #include #include static inline uint64_t get_cycles() { uint64_t t; // editor’s note: “=A” is unsafe for this in x86-64 __asm volatile (“rdtsc” : “=A”(t)); return t; } int num_measures = 10; int main () { int i, value, res1, […]

查找函数内的数组长度

在下面的程序中,数组ar的长度在main中是正确的,但在temp它显示指向ar的指针的长度,在我的计算机上它是2(以sizeof(int)为单位)。 #include void temp(int ar[]) // this could also be declared as `int *ar` { printf(“%d\n”, (int) sizeof(ar)/sizeof(int)); } int main(void) { int ar[]={1,2,3}; printf(“%d\n”, (int) sizeof(ar)/sizeof(int)); temp(ar); return 0; } 我想知道如何定义函数,以便在函数中正确读取数组的长度。

CMake交叉编译:忽略工具链文件中的C标志

我使用cmake进行交叉编译。 在我的工具链文件中有一行 SET(CMAKE_C_FLAGS “-std=gnu99”) 此变量未再次在CMakeLists.txt中设置。 当我运行cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..这个标志被忽略。 更详细: flags.cmake行显示一个空的C_FLAGS =行。 但是在CMakeOutput.log我可以找到一行Build flags: -std=gnu99 。 我发现第二次运行cmake .. (同样有或没有指定工具链文件)修复了这个问题。 但为什么我第一次运行cmake时没有设置? 编辑:添加了MNWE 的CMakeLists.txt: cmake_minimum_required(VERSION 2.6) project(myproject) SET(files src/main.c) add_executable(myexec ${files}) avr.cmake: SET(CMAKE_SYSTEM_NAME Generic) SET(CMAKE_C_COMPILER avr-gcc) SET(CMAKE_C_FLAGS “-std=gnu99”)

C标准对于比特类型宽度的位移更多的比特说了些什么?

请考虑以下代码: int i = 3 << 65; 我希望结果是i==0 ,但实际结果是i==6 。 通过一些测试,我发现使用以下代码: int i, s; int a = i << s; int b = i << (s & 31); a和b的值始终相同。 C标准是否有关于移位超过32位( int类型的宽度)的说法,或者这是未指定的行为?