#include<stdio.h>
int sel=5,out=10;
int findout(){
if(sel==5)
return out*=2;
}
int main(){
int ret1,ret2=-1;
ret1=findout();
printf("before %d %d %d",sel,out,ret1);
sel=8;out=7;
ret2=findout();
printf("\nafter %d %d %d",sel,out,ret2);
}
Run Code Online (Sandbox Code Playgroud)
输出:
在5 20 20之前
8 7 8之后
编辑:我的编译器没有显示任何警告.在这里你可以看到它.它在Ubuntu OS上的代码块GNU GCC编译器上
g++ -c Untitled1.cpp -o Untitled1.o
g++ -o Untitled1 Untitled1.o
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,当我没有返回任何值(for sel=8和out =7)时,值ret2是8多少?
程序编译成功并打印1000甚至没有foo()从我们的main()函数调用函数.这怎么可能?
#include<stdio.h>
void foo()
{
#define ans 1000
}
int main() {
printf("%d", ans);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我最近开始使用三元运算符,但我遇到了一个案例,我需要在同一行中使用多个三元运算符,但它们似乎没有像我预期的那样工作.
有人可以解释为什么这些线给出不同的结果.
x = 1 if True else 2 + 3 if False else 4 # x = 1, I expected 5
x = (1 if True else 2) + (3 if False else 4) # x = 5
Run Code Online (Sandbox Code Playgroud)
如果我添加括号,我会得到预期的结果,但我不明白括号的变化.
如果我旋转添加,没有括号,我得到正确的值.
3 if False else 4 + 1 if True else 2 # x = 5
Run Code Online (Sandbox Code Playgroud)
但是,如果第二个三元运算符为False,则会得到错误的结果:
3 if False else 4 + 1 if False else 2 # x = 5 # x = 2 ???
Run Code Online (Sandbox Code Playgroud)
是因为你不应该在同一行中有多个三元运算符,还是他们的另一个原因?
考虑以下代码:
int main()
{
printf("Hello World!\n");
int i;
i = i++ + ++i; // UB
}
Run Code Online (Sandbox Code Playgroud)
此代码是否保证打印"Hello World!"?最后一行调用未定义的行为,但是这会使整个程序无效吗?
我找到了这个,但问题是关于C++.这是关于C.
它不是未定义的行为和序列点的重复,因为它是C++.答案可能相同或不同,但这个问题是关于C.
I'm developing an online judge system for programming contests like LeetCode, Codeforces, etc. As for most programming contests, inline assembler is not allowed in C/C++, so I would like to add the same restriction to my system.
I would like to let GCC and G++ produce an error when compiling a C/C++ program containing inline assembler, so that any code containing inline assembler will result in compilation error.
Is there a way to achieve that? Should I pass some command …
我正在看此页面:https : //en.cppreference.com/w/c/language/operator_precedence
引起我注意的是,括号运算符的唯一描述是函数调用。这是否意味着该表达式x = a * (b+c)-(d*e)具有两个函数调用?
客户的代码期望malloc.h在“通常的可疑”位置之一中找到包含文件。在我的Mac,AFAICT,没有malloc.h,至少没有在任何地方,你会期望找到它,例如/usr/include,/usr/local/include或/opt/local/include。由于malloc()通常在 中定义stdlib.h,并且由于代码无论如何都包含 stdlib.h,因此我能够通过注释掉malloc.h. 我正在用gcc.
但有两个问题:我的 gcc 不知何故搞砸了?那个文件应该在那里?此外,代码炸弹几乎立即出现了一个我还无法追踪到的段错误。这可能是使用错误的后果malloc()吗?
我正在尝试将键盘的按键向右移动 2 位数字,例如,如果用户想要输入“a”,则必须按键盘上的“d”键,“p”到“]”。
这意味着如果用户输入是:“pm[ojku d, d]]'t/”,
那么输出将是:“我买了一个苹果”。
不包括键盘上该行中的大写键和最后一个键。
我这样做的方法是检查字符串的每个字符并将其 ASCII 与每种情况进行比较,它工作得很好。但这样做我觉得很愚蠢,想知道是否有任何算法或更聪明的方法来实现这一点。
while (fgets(inputString, 500, stdin)) {
stringLength = strlen(inputString);
for (int i = 0; i < stringLength; i++) {
switch (inputString[i]) {
case 100:
outputString[i] = 'a';
break;
case 109:
outputString[i] = 'b';
break;
case 98:
outputString[i] = 'c';
case 47:
outputString[i] = ',';
break;
case 50:
outputString[i] = '`';
break;
case 92:
outputString[i] = '[';
break;
default:
outputString[i] = inputString[i];
}
}
printf("%s", outputString);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试添加驱动程序,此页面告诉我打开View | Tool Windows | Database https://www.jetbrains.com/help/idea/managing-data-sources.html
但没有这样的工具窗口。看图片
我尝试了 Alt-3,因为菜单中缺少该选项,但没有任何反应。
如何从 Intellij 添加 postgresql 驱动程序?我已经有mysql驱动了。
IntelliJ版本:IntelliJ IDA 2020.2.1社区版
c ×8
ascii ×1
c++ ×1
g++ ×1
gcc ×1
include-path ×1
io ×1
java ×1
jdbc ×1
macos ×1
postgresql ×1
python ×1
return ×1
return-value ×1