반응형

C 251

매개변수가 없는 함수(실제 함수 정의와 비교)는 왜 컴파일하는가?

매개변수가 없는 함수(실제 함수 정의와 비교)는 왜 컴파일하는가? 나는 방금 왜 컴파일하는지 헷갈리는 누군가의 C코드를 우연히 발견했어.내가 이해할 수 없는 두 가지 점이 있다. 함수 프로토타입은 실제 함수 정의에 비해 매개변수가 없다. 함수 정의의 매개 변수에는 유형이 없다. #include int func(); int func(param) { return param; } int main() { int bla = func(10); printf("%d", bla); } 이게 왜 효과가 있지?나는 그것을 컴파일러 두어 개에서 시험해 보았는데, 그것은 잘 작동한다.int func();C표준이 없던 날, 즉 K&R C의 날(1989년 이전, 최초의 "ANSI C"표준이 발표된 해)부터의 모호한 함수 선언이다...

programing 2022.05.09

GCC에서 std=c99 플래그 설정

GCC에서 std=c99 플래그 설정 혹시 그 파일을 설정할 수 있는 파일이 있는지 궁금했다.-std=c99모든 편찬에 맞춰야 할 필요가 없도록 깃발을 달았다.나는 우분투에서 GCC 4.4를 사용하고 있다.전화하는 대신/usr/bin/gcc사용하다/usr/bin/c99. 이것은 C99 컴파일러를 호출하는 Single-Unix 승인 방법이다.Ubuntu 시스템에서 이것은 호출하는 스크립트를 가리킨다.gcc을 추가한 후에-std=c99깃발, 그게 바로 네가 원하는 거야어때.alias gcc99= gcc -std=c99?참조URL: https://stackoverflow.com/questions/2193634/setting-std-c99-flag-in-gcc

programing 2022.05.09

...의 다중 정의링커 오류

...의 다중 정의링커 오류 특수 파일을 정의했는데config.h 내 프로젝트에는 다음과 같은 파일도 있다. t.c, t.h pp.c, pp.h b.c b.h l.cpp 다음 항목: T.C: #include "t.h" #include "b.h" #include "pp.h" #include "config.h" b.c.에서: #include "b.h" #include "pp.h" pp.c: #include "pp.h" #include "config.h" L.cpp: #include "pp.h" #include "t.h" #include "config.h" 내겐 아무런 지시도 없다.*.h파일, 다음에서만*.c파일이야, 내가 이걸 구성으로 정의했어h: const char *names[i] = { "brian",..

programing 2022.05.09

GCC 문 표현식을 사용한 익명 함수

GCC 문 표현식을 사용한 익명 함수 이 질문은 매우 구체적이지 않다; 그것은 정말로 나 자신의 C 농축을 위한 것이고 나는 다른 사람들도 그것을 유용하게 여길 수 있기를 바란다. 고지 사항:나는 많은 사람들이 "FP를 하려고 한다면 기능적인 언어를 사용하라"고 대답하고 싶은 충동을 가질 것이라고 알고 있다.나는 다른 많은 C 라이브러리와 연결해야 하는 임베디드 환경에서 일하며, 더 많은 큰 공유 리브를 위한 공간이 많지 않고 많은 언어 런타임을 지원하지 않는다.게다가 동적 메모리 할당은 문제 밖이다.나 또한 정말 궁금하다. 우리 중 많은 사람들은 람다 표현에 대해 다음과 같은 니프티 C 매크로를 보았다. #define lambda(return_type, function_body) \ ({ \ retur..

programing 2022.05.09

Microsoft Crypto API 사용 안 함 RSAES-OAEP 키 전송 알고리즘

Microsoft Crypto API 사용 안 함 RSAES-OAEP 키 전송 알고리즘 사용하고 있다.CryptEncryptMessagea를 생성하다PKCS#7감춰진 메시지사용하고 있다.szOID_NIST_AES256_CBC암호화 알고리즘으로 사용할 수 있다. 생성된 메시지는 유효한 것으로 보이지만RSAES-OAEP야생에서 지원이 제한된 키 전송 알고리즘(Thunderbird, OpenSSL SMIME Module은 다른 많은 것 중에서 지원하지 않음). 가 더 오래된 CAPIgro CAPIroto CAPI로 RSAencryption주요 수송을 위해 그렇게 할 수 있는 방법이 없을까, 만약 사용보다는 방법이 있다면 낮은 수준의 메시징 기능으로 되돌릴 수 있을 것 같다.CryptEncryptMessage하..

programing 2022.05.08

기본적으로 char가 서명 또는 서명되지 않았는가?

기본적으로 char가 서명 또는 서명되지 않았는가? 「C의 완전한 참조」라는 책에서는 다음과 같이 언급하고 있다.char기본적으로 서명되지 않음. 하지만 나는 비주얼 스튜디오뿐만 아니라 GCC로 이것을 검증하려고 한다.그것은 기본적으로 서명된 것으로 받아들이고 있다. 어느 것이 정확한가?그 책은 틀렸다.이 표준은 일반인지 여부를 명시하지 않음char서명되거나 서명되지 않은 경우. 실제로 이 표준은 다음과 같은 세 가지 구별되는 유형을 정의한다.char,signed char, 그리고unsigned char.만약에#include 그리고 나서 봐.CHAR_MIN, 당신은 쉽게 알 수 있다.char이다signed또는unsigned(만약CHAR_MIN0보다 작거나 0과 같음)이지만, 그 경우에도 표준에 관한 한 ..

programing 2022.05.08

새 라인이 형식 문자열에 없는 한 호출 후 인쇄가 플러시되지 않는 이유는?

새 라인이 형식 문자열에 없는 한 호출 후 인쇄가 플러시되지 않는 이유는? 왜 그럴까?printf통화 후 뉴라인이 형식 문자열 내에 있지 않으면 플러시되지 않는지 여부이게 POSIX 행동인가?내가 어떻게 할 수 있었을까?printf매번 즉시 플러시하시겠습니까?그stdout스트림이 기본적으로 버퍼링되므로, 버퍼에 있는 내용이 새 라인에 도달한 후(또는 메시지가 표시될 때)에만 표시된다.즉시 인쇄할 수 있는 몇 가지 옵션: 인쇄 대상stderr대신하여fprintf(stderr기본적으로 버퍼링되지 않음: fprintf(stderr, "I will be printed immediately"); 붉어지다stdout사용하기 위해 필요할 때마다fflush: printf("Buffered, will be flushed..

programing 2022.05.08

->>>오래된 연산자인가, 오타/오류인가?

->>>오래된 연산자인가, 오타/오류인가? 내가 읽는 동안 나는 1993년에 작성된 WG14 결함 보고서 #51(또는 아마도 1893년, 그들은 세기와 밀레니엄을 벗어났다)을 우연히 발견했다.거기 코드 샘플에서 오퍼레이터가 스펠링으로->>에 대한 포인터에 사용되다struct. 찾은 연산자 우선 순위 표에서 찾을 수 없으므로, 연산자가 맞는지 궁금하고, 만약 그렇다면 이 연산자는 무엇을 하는가(또는 했는가)? 처음에는 오타라고 생각했지만, 질문에 대한 응답으로 본문에는 두 번, 코드 샘플에는 또 한 번 더 재현되고, 나 같은 초보자에게 뛰어나왔을 때, 눈치채지 못하고 적어도 두 명 이상의 C 전문가들을 그냥 지나쳐 버렸다는 것을 믿기가 힘들다.그것은 또한 코드의 초점에 있고, 매우 쉽게 알아차릴 수 있으며..

programing 2022.05.08

'in main;'이 유효한 C/C++ 프로그램인가?

'in main;'이 유효한 C/C++ 프로그램인가? 내 컴파일러가 그렇게 생각하는 것 같아서 물어보는 거야. echo 'int main;' | cc -x c - -Wall echo 'int main;' | c++ -x c++ - -Wall 캉은 이에 대해 경고나 오류를 발생시키지 않으며 gcc는 온순한 경고만 발생시킨다.'main' is usually a function [-Wmain], 그러나 C로 컴파일되었을 때만. -std=상관없는 것 같아 그렇지 않으면, 그것은 잘 조합되고 연결된다. 종지부를 SIGBUS(나를 위해) C와 C++에서 무엇을 반환해야 하는가?에서 (우수) 대답을 읽고 언어 사양을 통해 간단히 설명하면 분명 주요 기능이 필요한 것처럼 보일 것이다.하지만 gcc의 말벌은-Wmain(..

programing 2022.05.08

gets 기능이 왜 그렇게 위험해서 사용하면 안 되는가?

gets 기능이 왜 그렇게 위험해서 사용하면 안 되는가? 를 사용하는 C 코드를 컴파일하려고 할 때gets()GCC와 함께 작동하면 다음과 같은 경고를 받는다. (.text+0x34): 경고: '위험' 기능은 사용해서는 안 된다. 나는 이것이 스택 보호와 보안과 관련이 있다는 것을 기억하지만, 왜 그런지 정확히 모르겠다. 어떻게 하면 이 경고를 제거할 수 있으며, 왜 사용과 관련된 경고가 있는가?gets()? 만약gets()그렇다면 왜 우리는 그것을 제거할 수 없을까?왜 그럴까?gets()위험한 최초의 인터넷 웜(Morris Internet Worm)은 약 30년 전(1988-11-02) 탈출했고, 이를 이용했다.gets()시스템에서 시스템으로 전파하는 방법의 하나로 버퍼 오버플로를 들 수 있다.기본적인..

programing 2022.05.08
반응형