반응형

C 17

전처리기를 이용한 문자열 연결

전처리기를 이용한 문자열 연결 전처리 중에 문자열을 연결하는 것이 가능합니까? 이 예시를 찾았습니다. #define H "Hello " #define W "World!" #define HW H W printf(HW); // Prints "Hello World!" 그러나 사용할 때는 "Hello"를 출력합니다.gcc -std=c99 업데이트 이 예제는 지금 작동하는 것 같습니다.하지만 c 전처리기의 정상적인 기능인가요?인접한 문자열 리터럴의 연결은 전처리기의 특징이 아니라 핵심 언어(C와 C++)의 특징입니다.다음과 같이 쓸 수 있습니다. printf("Hello " " world\n"); 전처리기에서 토큰을 연결할 수는 있지만 까다롭기 때문에 주의해야 합니다.핵심은 ## 연산자입니다.코드의 맨 위에 이걸..

programing 2023.10.01

c에서 여러 문자열을 연결하는 더 나은 방법?

c에서 여러 문자열을 연결하는 더 나은 방법? 아래와 같이 strcat()에 여러 개의 호출을 모두 연속으로 수행하는 것보다 여러 개의 문자열을 연결하는 더 나은 방법이 있습니까? char prefix[100] = ""; strcat(prefix, argv[0]); strcat(prefix, ": "); strcat(prefix, cmd_argv[0]); strcat(prefix, ": "); strcat(prefix, cmd_argv[1]); perror(prefix); sprintf(prefix,"%s: %s: %s",argv[0],cmd_argv[0],cmd_argv[1]); 아니면snprintf버퍼 오버런을 방지합니다.snprintf가 가장 좋고 사용하기 쉬운 옵션이지만 "빠르지" 않을 수도 있습..

programing 2023.10.01

이 포인터 산술은 왜 C에서는 허용되지 않는 겁니까?

이 포인터 산술은 왜 C에서는 허용되지 않는 겁니까? 이 질문에는 이미 다음과 같은 답변이 있습니다. C++에서 배열 이름이 상수 포인터입니까? (2개 답변) 닫힘6년 전에. char arr[] = "Hello"; arr = arr + 1; // error occurs 배열 타입이 있는 식은 배열의 초기 요소를 가리키는 포인터 타입으로 변환되는 것으로 알고 있습니다.했습니다를 했습니다.arr = arr + 1에 r가 가 됨) 소(arr)다)합니다.이것은 왜 C에서는 작동하지 않습니까?arr + 1는 실제로 배열의 두 번째 요소(즉, 배열의 두 번째 요소)를 가리키는 포인터입니다.&arr[1]). 을 다시 , 에 쓸 수 것은 .arr 두 때문에 할 수 arr는 의 배열입니다.char포인터가 아닌 요소.여기..

programing 2023.10.01

경량 C 코드 샌드박스를 만드는 방법은?

경량 C 코드 샌드박스를 만드는 방법은? 로컬 및 온라인 소스에서 함수를 수집할 수 있는 C 프리 프로세서/컴파일러를 만들고 싶습니다.즉: #fetch MP3FileBuilder http://scripts.com/MP3Builder.gz #fetch IpodDeviceReader http://apple.com/modules/MP3Builder.gz void mymodule_main() { MP3FileBuilder(&some_data); } 그게 쉬운 부분입니다. 어려운 점은 가져온 코드를 디스크나 시스템 리소스(메모리 할당 및 스택 포함)에 직접 또는 제한 없이 액세스할 수 있도록 "샌드박스"할 수 있는 신뢰할 수 있는 방법이 필요하다는 것입니다.신뢰할 수 없는 C 코드(모듈)의 작은 토막을 별도의 프..

programing 2023.09.26

어떤 상황에서 malloc이 NULL을 반환할 수 있습니까?

어떤 상황에서 malloc이 NULL을 반환할 수 있습니까? 저는 그런 적이 없었고, 지금까지 몇 년 동안 프로그래밍을 해왔습니다. 에게 가 수 ?malloc실제로 작동이 안 될까요? 기억력 고갈을 말하는 게 아닙니다사용자가 지정한 바운드 크기의 메모리 블록을 하나만 할당하는 경우, 예를 들어 정수가 원인인 경우를 들어보겠습니다.malloc실패하다, 실패하다, 실패하다, 실패하다, 실패하다, 실패.임베디드 시스템에서 몇가지 작업을 해야 합니다. 거기서 NULL이 자주 반환됩니다 :- 현대의 대규모 주소 공간 및 백업 저장소 시스템에서는 메모리가 부족하기가 훨씬 어렵지만, GIS나 메모리 내 데이터베이스와 같이 많은 양의 데이터를 처리하는 애플리케이션이나 버그 코드로 인해 메모리가 유출되는 곳에서는 여전히..

programing 2023.09.26

GDB: 일반 포인터의 참조 해제 시도

GDB: 일반 포인터의 참조 해제 시도 에서 GDB 와 같은 가 추가적인 하도록 하려면 합니까?x/s? 할 때x/"일반 포인터를 참조 해제 시도"라는 오류가 나타납니다.으로.x/각 사용에는 암시적인 참조 해제가 포함되므로 여러 번 작동하지만, 각 중간 결과를 복사하여 붙여넣어야 하므로 귀찮습니다. 예 C한 C 를 해 보십시오.example.c: #include int main(int argc, char **argv) { printf("argv[0] = %s\n", argv[0]); } 해서 GDB 가 .argv됩니다에 됩니다.0xc(%ebp)에 대한 두 입니다.printf 즉,에)에서)0x4(%esp) 26 : $ gcc -o example example.c $ gdb example (gdb) disas..

programing 2023.09.26

C/C++에서 두 개의 '주요'

C/C++에서 두 개의 '주요' 주요 기능 두 가지로 C 또는 C++로 프로그램을 작성할 수 있습니까?아니요. 모든 프로그램은 하나의 메인()을 갖는데, 이것이 컴파일러와 링커가 어느 정도 의미 있는 곳에서 시작하는 실행 파일을 생성하는 방식입니다. 기본적으로 두 가지 옵션이 있습니다. 실제 메인을 호출할 명령행 인수를 결정하기 위해 메인()을 해석하도록 합니다.단점은 두 프로그램 모두에서 실행 파일을 갖게 된다는 것입니다. 공유 코드로 라이브러리를 만들고 각 기본 파일을 해당 라이브러리와 비교하여 컴파일합니다.결국 두 개의 실행 파일을 갖게 될 것입니다. 당신은 다음과 같은 두가지 함수를 가질 수 있습니다.main. 이름이 특별한 것도 아니고 예약된 것도 아닙니다.특별한 것은 그 기능인데, 마침 그런 ..

programing 2023.09.21

c, boole에서 true == 1이고 false == 0입니까?

c, boole에서 true == 1이고 false == 0입니까? 분명히 말씀드리지만 C++의 경우에도 비슷한 답을 찾았지만 저는 코딩을 처음 해봐서 C에도 적용이 되는지 잘 모르겠습니다.더 정확하게는 그렇지 않은 것은0사실입니다. 그렇게1사실이지만, 사실도 마찬가지입니다.2,3...기타.당신이 어떤 버전의 C에 대해 우려하고 있는지 말하는 것을 무시했습니다.이것이라고 가정해 보겠습니다. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 명세서를 읽어보면 알 수 있듯이, 표준 정의는true그리고.false1과 0입니다. 질문이 다른 버전의 C에 관한 것이거나 또는 비표준 정의에 관한 것이라면true그리고.false, 좀 더 구체적인 질문을 합니다.언..

programing 2023.09.16

C++ 및 C에서 Union 초기화

C++ 및 C에서 Union 초기화 다음과 같이 정의된 헤더 파일에 상수를 사용하는 작동 C 라이브러리를 만들었습니다. typedef struct Y { union { struct bit_field bits; uint8_t raw[4]; } X; } CardInfo; static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } }; 저는 알고 있습니다..rawinitializer는 C only 구문입니다. C 및 C++에서 사용할 수 있도록 결합이 있는 상수를 정의하려면 어떻게 해야 합니까?저도 같은 문제가 있었습니다.C89의 경우는 다음과 같습니다. C89 스타일 이니셜라이저의 경우 선언된 순서대로 구조 구성원을 초기화해야 하며, 조합의 첫 번째 구성원만 초기..

programing 2023.09.16

빈 구조의 크기는 C에서 0이고 C++에서 1입니다. 왜죠?

빈 구조의 크기는 C에서 0이고 C++에서 1입니다. 왜죠? 이 질문에는 이미 다음과 같은 답변이 있습니다. 닫힘12년 전에. 가능한 중복: C++의 빈 클래스 C에서 빈 구조물의 크기는 얼마입니까? C++의 빈 구조물의 크기가 1이라는 것을 어딘가에서 읽었습니다.그래서 검증을 해볼까 했습니다.아쉽게도 C파일로 저장하고 사용하였습니다.헤더랑 출력을 보고 깜짝 놀랐습니다.0이었습니다. 그 말은 struct Empty { }; int main(void) { printf("%d",(int)sizeof(Empty)); } 인쇄중이었습니다0C 파일로 컴파일될 때 그리고1C++ 파일로 컴파일되는 경우.그 이유를 알고 싶습니다.난 그걸 읽었다.sizeof크기가 다음과 같다면 C++의 빈 구조는 0이 아닙니다.0그러면..

programing 2023.09.11
반응형