如果我在一组新的花括号中创建一个变量,那个变量是从结束括号上的堆栈中弹出的,还是会挂起直到函数结束?例如:
void foo() {
int c[100];
{
int d[200];
}
//code that takes a while
return;
}
Run Code Online (Sandbox Code Playgroud)
会不会d是在占用内存code that takes a while部分?
我看到了这个问题的一些答案,我明白了 - 你不能在一个内部声明和分配变量switch.但我想知道以下是否正确抛出错误说
错误:'int'之前的预期表达式
码:
switch (i) {
case 0:
int j = 1;
break;
}
Run Code Online (Sandbox Code Playgroud)
为什么NSLog()在它之前拨打电话会导致没有错误?
switch (i) {
case 0:
NSLog(@"wtf");
int j = 1;
break;
}
Run Code Online (Sandbox Code Playgroud) 什么是使用点{和}在一个case声明?通常,无论case语句中有多少行,都会执行所有行.这只是关于旧/新编译器的规则还是有背后的东西?
int a = 0;
switch (a) {
case 0:{
std::cout << "line1\n";
std::cout << "line2\n";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
和
int a = 0;
switch (a) {
case 0:
std::cout << "line1\n";
std::cout << "line2\n";
break;
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main (void) {
struct addrinfo hints;
memset (&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_CANONNAME;
struct addrinfo *res;
getaddrinfo ("example.com", "http", &hints, &res);
printf ("Host: %s\n", "example.com");
void *ptr;
while (res != NULL) {
printf("AI Family for current addrinfo: %i\n", res->ai_family);
switch (res->ai_family) {
case AF_INET:
ptr = (struct sockaddr_in *) res->ai_addr;
struct sockaddr_in *sockAddrIn = (struct sockaddr_in *) …Run Code Online (Sandbox Code Playgroud) 切入追逐我已经重新创建了我的问题,因为它是相当自我解释的.
这符合,没有错误:
switch (n) {
case 1:
NSLog(@"");
NSString *aStr;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
这编译错误,它只缺少NSLog():
switch (n) {
case 1:
NSString *aStr;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
它在编译时出现错误"NSString'之前的预期表达式 "
我在这里错过了什么吗?
我有以下代码,我收到错误'Duplicate Declaration query_url'.
switch(condition) {
case 'complex':
const query_url = `something`;
break;
default:
const query_url = `something`;
break;
}
Run Code Online (Sandbox Code Playgroud)
我知道query_url被声明了两次,这是不对的.但我不知道如何解决这个问题.有人可以帮助确定这项工作的正确方法吗?
我不明白为什么我收到错误:
'case'标签跳过'element'的初始化.
有人可以向我解释一下吗?
void LinkedList::process_example(int choice) {
switch(choice) {
case 1:
cout << endl << endl << "Current S = ";
this->printSet();
cout << "Enter an element :";
char* element = "lol";
//cin>>element;
cin.clear();
cin.ignore(200, '\n');
this->Addelementfromback(element); //error is here
cout << endl << endl << "Current S = ";
this->printSet();
break;
case 2:
this->check_element();
break;
case 3:
cout << endl << endl;
cout << "Current Set S = ";
this->printSet();
cout << endl << "S has ";
int count …Run Code Online (Sandbox Code Playgroud) 我想我会失明,因为我无法弄清楚此代码中语法错误的位置:
if( cell == nil ) {
titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
reuseIdentifier:CellIdentifier ] autorelease
];
switch( cellNumber ) {
case 1:
NSString *viewDataKey = @"Name";
etc...
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我在最后一行的'*'标记之前收到错误:语法错误.
对不起这个基本问题,但我错过了什么?
我在C/Objective-C/C++中使用大括号和我的所有switch case语句
直到不久之前,我还没有考虑过break;在括号内加入声明是好还是坏.我怀疑它没关系,但我认为它仍然值得问.
switch (foo) {
case 1: {
// stuff
break;
}
default: {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
VS
switch (foo) {
case 1: {
// stuff
} break;
default: {
// stuff
} break;
}
Run Code Online (Sandbox Code Playgroud) 当这不能在C中编译时我很困惑:
int main()
{
for (int i = 0; i < 4; ++i)
int a = 5; // A dependent statement may not be declaration
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经习惯了将要编译的C++.我只是愣了一会儿,直到我记得这里的答案是关于如何在C和C++中将不同的东西视为"陈述".这是关于switch语句的.for循环括号后面的"语句"必须同时出现在C和C++中.这可以在添加分号或创建{}波浪形支架块的情况下完成.
在C++中"int a = 7;" 被视为声明,定义和初始化.CI认为它也被认为是所有这些,但在C中它不被视为"声明".
有人可以准确地澄清为什么在C中这不是一个陈述,而在C++中它是?这让我对一个陈述的概念感到困惑,因为一种语言说的是,而另一种语言则说不是,所以我有点困惑.
c ×5
c++ ×3
objective-c ×3
cocoa ×1
coding-style ×1
curly-braces ×1
debugging ×1
declaration ×1
ecmascript-6 ×1
if-statement ×1
iphone ×1
javascript ×1
memory ×1
stack ×1
variables ×1
xcode ×1
xcode3.2 ×1